Message ID | 1568130236-13744-1-git-send-email-sagar.kadam@sifive.com |
---|---|
Headers | show |
Series | add gpio support for HiFive Unleashed A00 board. | expand |
Hi Sagar, On Tue, Sep 10, 2019 at 11:44 PM Sagar Shrikant Kadam <sagar.kadam@sifive.com> wrote: > > U-Boot currently is missing GPIO support for FU540-C000 SoC which is > mounted on HiFive Unleashed A00 board. This patch is intended to add DM > based GPIO controller driver in order to access GPIO pins within the SoC > using GPIO command in U-Boot. More details on the GPIO controller within > the SoC can be found at[1] > > The driver is based above master branch of u-boot-riscv.git and provides a > method to configure Input/Output mode of the GPIO pin along with an option > to set or clear state of the GPIO pin. The patch is available in > dev/sagark/gpio_v3 branch here[2]. > > GPIO device node added to the mainline bound device tree for HiFive > Unleashed is available in dev/sagark/mlv5.3-rc5 branch of repo here[3]. > > This implementation is ported from linux driver submitted for review > at [4]. > > More details of GPIO pin routing on J1 header is available in schematic > document[5] > > [1] https://static.dev.sifive.com/FU540-C000-v1.0.pdf > [2] https://github.com/sagsifive/u-boot > [3] https://github.com/sagsifive/riscv-linux-hifive/ > [4] https://lkml.org/lkml/2018/10/9/1103 > [5] https://static.dev.sifive.com/dev-kits/hifive-unleashed/hifive-unleashed-a00-schematics.pdf > > Driver Testing: > #Set GPIO1 high. > =>gpio set 1 > Can be confirmed by probing pin No #24 on J1 Header or memory dump of > gpio register space viz: #md 0x10060000 > > #Set GPIO1 low > =>gpio clear 0 > > #Toggle GPIO1 > =>gpio toggle 1 #Toggle value of GPIO1 > =>gpio toggle 1 #Toggle value of GPIO1 > > #Configure pin as input > =>gpio input 3 #Configure gpio line 3 as input. > > #Error check > =>gpio set 16 #Not a valid GPIO number for FU540-C000 > GPIO: '16' not found > Command 'gpio' failed: Error -22 > I tested this: => gpio status -a Bank gpio@10060000: gpio@100600000: unknown gpio@100600001: unknown gpio@100600002: unknown gpio@100600003: unknown gpio@100600004: unknown gpio@100600005: unknown gpio@100600006: unknown gpio@100600007: unknown gpio@100600008: unknown gpio@100600009: unknown gpio@1006000010: unknown gpio@1006000011: unknown gpio@1006000012: unknown gpio@1006000013: unknown gpio@1006000014: unknown gpio@1006000015: unknown The status is "unknown" for all gpio pins, which is wrong. It should be either input or output. Also the gpio pin name is weird. I think we should use "0, 1, 2 ..." Regards, Bin Regards, Bin
Hi Bin, On Wed, Sep 18, 2019 at 1:23 PM Bin Meng <bmeng.cn@gmail.com> wrote: > > Hi Sagar, > > On Tue, Sep 10, 2019 at 11:44 PM Sagar Shrikant Kadam > <sagar.kadam@sifive.com> wrote: > > > > U-Boot currently is missing GPIO support for FU540-C000 SoC which is > > mounted on HiFive Unleashed A00 board. This patch is intended to add DM > > based GPIO controller driver in order to access GPIO pins within the SoC > > using GPIO command in U-Boot. More details on the GPIO controller within > > the SoC can be found at[1] > > > > The driver is based above master branch of u-boot-riscv.git and provides a > > method to configure Input/Output mode of the GPIO pin along with an option > > to set or clear state of the GPIO pin. The patch is available in > > dev/sagark/gpio_v3 branch here[2]. > > > > GPIO device node added to the mainline bound device tree for HiFive > > Unleashed is available in dev/sagark/mlv5.3-rc5 branch of repo here[3]. > > > > This implementation is ported from linux driver submitted for review > > at [4]. > > > > More details of GPIO pin routing on J1 header is available in schematic > > document[5] > > > > [1] https://static.dev.sifive.com/FU540-C000-v1.0.pdf > > [2] https://github.com/sagsifive/u-boot > > [3] https://github.com/sagsifive/riscv-linux-hifive/ > > [4] https://lkml.org/lkml/2018/10/9/1103 > > [5] https://static.dev.sifive.com/dev-kits/hifive-unleashed/hifive-unleashed-a00-schematics.pdf > > > > Driver Testing: > > #Set GPIO1 high. > > =>gpio set 1 > > Can be confirmed by probing pin No #24 on J1 Header or memory dump of > > gpio register space viz: #md 0x10060000 > > > > #Set GPIO1 low > > =>gpio clear 0 > > > > #Toggle GPIO1 > > =>gpio toggle 1 #Toggle value of GPIO1 > > =>gpio toggle 1 #Toggle value of GPIO1 > > > > #Configure pin as input > > =>gpio input 3 #Configure gpio line 3 as input. > > > > #Error check > > =>gpio set 16 #Not a valid GPIO number for FU540-C000 > > GPIO: '16' not found > > Command 'gpio' failed: Error -22 > > > > I tested this: > > => gpio status -a > Bank gpio@10060000: > gpio@100600000: unknown > gpio@100600001: unknown > gpio@100600002: unknown > gpio@100600003: unknown > gpio@100600004: unknown > gpio@100600005: unknown > gpio@100600006: unknown > gpio@100600007: unknown > gpio@100600008: unknown > gpio@100600009: unknown > gpio@1006000010: unknown > gpio@1006000011: unknown > gpio@1006000012: unknown > gpio@1006000013: unknown > gpio@1006000014: unknown > gpio@1006000015: unknown > > The status is "unknown" for all gpio pins, which is wrong. It should > be either input or output. Thank you for your suggestions. The get_function operation is missing for this driver and so the status is unknown. I will implement it and send a revised version. Thanks for catching this. Please correct me if I am wrong, what I do see is that the gpio command uses the bank name appended before the GPIO number. So the bank_name as assigned in the driver probe function gets prefixed to the pin number and so it shows: gpio@100600000 gpio@100600001 and so on. I see that few driver's updates the uc_priv->bank_name in probe function with '_' as the separator between bank_name and pin number and so #gpio status -a will show it as : Bank <bank_name>: <bank_name>_0: input : 1 [] <bank_name>_1: input : 1 [] ........ and so on eg: In the current case here it will show as Bank gpio@10060000_: gpio@10060000_0 gpio@10060000_1 and so on. Please let me know if this implementation is ok. > > Also the gpio pin name is weird. I think we should use "0, 1, 2 ..." > The current implementation of the gpio_get_status function includes the base_name to the pin description. Truncating it here can help to get pin numbers as just numbers "0,1,2....". I will also include this if needed? Thanks & BR, Sagar Kadam > Regards, > Bin > > Regards, > Bin
Hi Sagar, On Thu, Sep 26, 2019 at 1:54 AM Sagar Kadam <sagar.kadam@sifive.com> wrote: > > Hi Bin, > > On Wed, Sep 18, 2019 at 1:23 PM Bin Meng <bmeng.cn@gmail.com> wrote: > > > > Hi Sagar, > > > > On Tue, Sep 10, 2019 at 11:44 PM Sagar Shrikant Kadam > > <sagar.kadam@sifive.com> wrote: > > > > > > U-Boot currently is missing GPIO support for FU540-C000 SoC which is > > > mounted on HiFive Unleashed A00 board. This patch is intended to add DM > > > based GPIO controller driver in order to access GPIO pins within the SoC > > > using GPIO command in U-Boot. More details on the GPIO controller within > > > the SoC can be found at[1] > > > > > > The driver is based above master branch of u-boot-riscv.git and provides a > > > method to configure Input/Output mode of the GPIO pin along with an option > > > to set or clear state of the GPIO pin. The patch is available in > > > dev/sagark/gpio_v3 branch here[2]. > > > > > > GPIO device node added to the mainline bound device tree for HiFive > > > Unleashed is available in dev/sagark/mlv5.3-rc5 branch of repo here[3]. > > > > > > This implementation is ported from linux driver submitted for review > > > at [4]. > > > > > > More details of GPIO pin routing on J1 header is available in schematic > > > document[5] > > > > > > [1] https://static.dev.sifive.com/FU540-C000-v1.0.pdf > > > [2] https://github.com/sagsifive/u-boot > > > [3] https://github.com/sagsifive/riscv-linux-hifive/ > > > [4] https://lkml.org/lkml/2018/10/9/1103 > > > [5] https://static.dev.sifive.com/dev-kits/hifive-unleashed/hifive-unleashed-a00-schematics.pdf > > > > > > Driver Testing: > > > #Set GPIO1 high. > > > =>gpio set 1 > > > Can be confirmed by probing pin No #24 on J1 Header or memory dump of > > > gpio register space viz: #md 0x10060000 > > > > > > #Set GPIO1 low > > > =>gpio clear 0 > > > > > > #Toggle GPIO1 > > > =>gpio toggle 1 #Toggle value of GPIO1 > > > =>gpio toggle 1 #Toggle value of GPIO1 > > > > > > #Configure pin as input > > > =>gpio input 3 #Configure gpio line 3 as input. > > > > > > #Error check > > > =>gpio set 16 #Not a valid GPIO number for FU540-C000 > > > GPIO: '16' not found > > > Command 'gpio' failed: Error -22 > > > > > > > I tested this: > > > > => gpio status -a > > Bank gpio@10060000: > > gpio@100600000: unknown > > gpio@100600001: unknown > > gpio@100600002: unknown > > gpio@100600003: unknown > > gpio@100600004: unknown > > gpio@100600005: unknown > > gpio@100600006: unknown > > gpio@100600007: unknown > > gpio@100600008: unknown > > gpio@100600009: unknown > > gpio@1006000010: unknown > > gpio@1006000011: unknown > > gpio@1006000012: unknown > > gpio@1006000013: unknown > > gpio@1006000014: unknown > > gpio@1006000015: unknown > > > > The status is "unknown" for all gpio pins, which is wrong. It should > > be either input or output. > > Thank you for your suggestions. > The get_function operation is missing for this driver and so the > status is unknown. > I will implement it and send a revised version. Thanks for catching this. > Please correct me if I am wrong, what I do see is that the gpio command > uses the bank name appended before the GPIO number. So the bank_name > as assigned in the driver probe function gets prefixed to the pin number and > so it shows: > gpio@100600000 > gpio@100600001 > and so on. > I see that few driver's updates the uc_priv->bank_name in probe function > with '_' as the separator between bank_name and pin number and so > #gpio status -a will show it as : > > Bank <bank_name>: > <bank_name>_0: input : 1 [] > <bank_name>_1: input : 1 [] > ........ and so on > > eg: In the current case here it will show as > Bank gpio@10060000_: > gpio@10060000_0 > gpio@10060000_1 and so on. > > Please let me know if this implementation is ok. > > > > Also the gpio pin name is weird. I think we should use "0, 1, 2 ..." > > > The current implementation of the gpio_get_status function includes > the base_name > to the pin description. Truncating it here can help to get pin numbers > as just numbers > "0,1,2....". I will also include this if needed? > I think <bank_name>_0 is fine. Thanks! Regards, Bin
Hi Bin, On Thu, Sep 26, 2019 at 7:26 AM Bin Meng <bmeng.cn@gmail.com> wrote: > > Hi Sagar, > > On Thu, Sep 26, 2019 at 1:54 AM Sagar Kadam <sagar.kadam@sifive.com> wrote: > > > > Hi Bin, > > > > On Wed, Sep 18, 2019 at 1:23 PM Bin Meng <bmeng.cn@gmail.com> wrote: > > > > > > Hi Sagar, > > > > > > On Tue, Sep 10, 2019 at 11:44 PM Sagar Shrikant Kadam > > > <sagar.kadam@sifive.com> wrote: > > > > > > > > U-Boot currently is missing GPIO support for FU540-C000 SoC which is > > > > mounted on HiFive Unleashed A00 board. This patch is intended to add DM > > > > based GPIO controller driver in order to access GPIO pins within the SoC > > > > using GPIO command in U-Boot. More details on the GPIO controller within > > > > the SoC can be found at[1] > > > > > > > > The driver is based above master branch of u-boot-riscv.git and provides a > > > > method to configure Input/Output mode of the GPIO pin along with an option > > > > to set or clear state of the GPIO pin. The patch is available in > > > > dev/sagark/gpio_v3 branch here[2]. > > > > > > > > GPIO device node added to the mainline bound device tree for HiFive > > > > Unleashed is available in dev/sagark/mlv5.3-rc5 branch of repo here[3]. > > > > > > > > This implementation is ported from linux driver submitted for review > > > > at [4]. > > > > > > > > More details of GPIO pin routing on J1 header is available in schematic > > > > document[5] > > > > > > > > [1] https://static.dev.sifive.com/FU540-C000-v1.0.pdf > > > > [2] https://github.com/sagsifive/u-boot > > > > [3] https://github.com/sagsifive/riscv-linux-hifive/ > > > > [4] https://lkml.org/lkml/2018/10/9/1103 > > > > [5] https://static.dev.sifive.com/dev-kits/hifive-unleashed/hifive-unleashed-a00-schematics.pdf > > > > > > > > Driver Testing: > > > > #Set GPIO1 high. > > > > =>gpio set 1 > > > > Can be confirmed by probing pin No #24 on J1 Header or memory dump of > > > > gpio register space viz: #md 0x10060000 > > > > > > > > #Set GPIO1 low > > > > =>gpio clear 0 > > > > > > > > #Toggle GPIO1 > > > > =>gpio toggle 1 #Toggle value of GPIO1 > > > > =>gpio toggle 1 #Toggle value of GPIO1 > > > > > > > > #Configure pin as input > > > > =>gpio input 3 #Configure gpio line 3 as input. > > > > > > > > #Error check > > > > =>gpio set 16 #Not a valid GPIO number for FU540-C000 > > > > GPIO: '16' not found > > > > Command 'gpio' failed: Error -22 > > > > > > > > > > I tested this: > > > > > > => gpio status -a > > > Bank gpio@10060000: > > > gpio@100600000: unknown > > > gpio@100600001: unknown > > > gpio@100600002: unknown > > > gpio@100600003: unknown > > > gpio@100600004: unknown > > > gpio@100600005: unknown > > > gpio@100600006: unknown > > > gpio@100600007: unknown > > > gpio@100600008: unknown > > > gpio@100600009: unknown > > > gpio@1006000010: unknown > > > gpio@1006000011: unknown > > > gpio@1006000012: unknown > > > gpio@1006000013: unknown > > > gpio@1006000014: unknown > > > gpio@1006000015: unknown > > > > > > The status is "unknown" for all gpio pins, which is wrong. It should > > > be either input or output. > > > > Thank you for your suggestions. > > The get_function operation is missing for this driver and so the > > status is unknown. > > I will implement it and send a revised version. Thanks for catching this. > > Please correct me if I am wrong, what I do see is that the gpio command > > uses the bank name appended before the GPIO number. So the bank_name > > as assigned in the driver probe function gets prefixed to the pin number and > > so it shows: > > gpio@100600000 > > gpio@100600001 > > and so on. > > I see that few driver's updates the uc_priv->bank_name in probe function > > with '_' as the separator between bank_name and pin number and so > > #gpio status -a will show it as : > > > > Bank <bank_name>: > > <bank_name>_0: input : 1 [] > > <bank_name>_1: input : 1 [] > > ........ and so on > > > > eg: In the current case here it will show as > > Bank gpio@10060000_: > > gpio@10060000_0 > > gpio@10060000_1 and so on. > > > > Please let me know if this implementation is ok. > > > > > > Also the gpio pin name is weird. I think we should use "0, 1, 2 ..." > > > > > The current implementation of the gpio_get_status function includes > > the base_name > > to the pin description. Truncating it here can help to get pin numbers > > as just numbers > > "0,1,2....". I will also include this if needed? > > > > I think <bank_name>_0 is fine. Thanks! > Thanks, I will roll out the next patch with necessary changes. BR, Sagar > Regards, > Bin