]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
gpio: zynq: Add pmc gpio support
authorShubhrajyoti Datta <shubhrajyoti.datta@xilinx.com>
Wed, 17 Jun 2020 11:37:26 +0000 (17:07 +0530)
committerBartosz Golaszewski <bgolaszewski@baylibre.com>
Wed, 24 Jun 2020 10:16:57 +0000 (12:16 +0200)
Add PMC gpio support.
Only bank 0,1, 3 and 4 are connected to the multiplexed Input output
pins. Bank 0 and 1 to mio and bank 3 and 4 to extended multiplexed input
output pins.

Versal devices are the industry's first adaptive compute
acceleration platforms.
https://www.xilinx.com/support/documentation/data_sheets/ds950-versal-overview.pdf

On the Versal platform, we are using two customized GPIO controllers(IP)
which were used in Zynq/ZynqMp platform.
One of them present in the Platform Management Controller(PMC) block and
other in Processing System(PS) block.

In PMC_GPIO only Bank0,1,3 & 4 are enabled and in PS_GPIO only
Bank 0 & 3 are enabled.

You can find more details of GPIO IP in ZynqMP TRM General Purpose
I/O(Chapter-27).
https://www.xilinx.com/support/documentation/user_guides/ug1085-zynq-ultrascale-trm.pdf

Signed-off-by: Shubhrajyoti Datta <shubhrajyoti.datta@xilinx.com>
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
drivers/gpio/gpio-zynq.c

index b6261a3aec5584309427ca4d0842b55650968953..2ddb59b242e77e7a04af545b10af45957ba8f80d 100644 (file)
@@ -23,6 +23,7 @@
 #define ZYNQ_GPIO_MAX_BANK     4
 #define ZYNQMP_GPIO_MAX_BANK   6
 #define VERSAL_GPIO_MAX_BANK   4
+#define PMC_GPIO_MAX_BANK      5
 #define VERSAL_UNUSED_BANKS    2
 
 #define ZYNQ_GPIO_BANK0_NGPIO  32
@@ -815,6 +816,20 @@ static const struct zynq_platform_data versal_gpio_def = {
        .bank_max[3] = 57, /* Bank 3 is connected to FMIOs (32 pins) */
 };
 
+static const struct zynq_platform_data pmc_gpio_def = {
+       .label = "pmc_gpio",
+       .ngpio = 116,
+       .max_bank = PMC_GPIO_MAX_BANK,
+       .bank_min[0] = 0,
+       .bank_max[0] = 25, /* 0 to 25 are connected to MIOs (26 pins) */
+       .bank_min[1] = 26,
+       .bank_max[1] = 51, /* Bank 1 are connected to MIOs (26 pins) */
+       .bank_min[3] = 52,
+       .bank_max[3] = 83, /* Bank 3 is connected to EMIOs (32 pins) */
+       .bank_min[4] = 84,
+       .bank_max[4] = 115, /* Bank 4 is connected to EMIOs (32 pins) */
+};
+
 static const struct zynq_platform_data zynqmp_gpio_def = {
        .label = "zynqmp_gpio",
        .quirks = GPIO_QUIRK_DATA_RO_BUG,
@@ -853,6 +868,7 @@ static const struct of_device_id zynq_gpio_of_match[] = {
        { .compatible = "xlnx,zynq-gpio-1.0", .data = &zynq_gpio_def },
        { .compatible = "xlnx,zynqmp-gpio-1.0", .data = &zynqmp_gpio_def },
        { .compatible = "xlnx,versal-gpio-1.0", .data = &versal_gpio_def },
+       { .compatible = "xlnx,pmc-gpio-1.0", .data = &pmc_gpio_def },
        { /* end of table */ }
 };
 MODULE_DEVICE_TABLE(of, zynq_gpio_of_match);