drivers: Add func to config gpio pin for secure access
Add func to config gpio pin for secure access
Signed-off-by: Sheetal Tigadoli <sheetal.tigadoli@broadcom.com>
Acked-by: Jerome Forissier <jerome@forissier.org>
diff --git a/core/arch/arm/plat-bcm/platform_config.h b/core/arch/arm/plat-bcm/platform_config.h
index d9220e2..f9f8c5e 100644
--- a/core/arch/arm/plat-bcm/platform_config.h
+++ b/core/arch/arm/plat-bcm/platform_config.h
@@ -24,6 +24,9 @@
#define ASIU_GPIO_INTR 190
#define GPIO_NUM_START0 0
#define NUM_GPIOS0 151
+
+#define CHIP_SECURE_GPIO_CONTROL0_BASE 0x68b60000
+
#define SPI_0_BASE 0x68a80000
#define SPI_0_END (SPI_0_BASE + 0x1000)
#define SPI_0_CLK_HZ 175000000
diff --git a/core/drivers/bcm_gpio.c b/core/drivers/bcm_gpio.c
index 58d34d6..4d875e8 100644
--- a/core/drivers/bcm_gpio.c
+++ b/core/drivers/bcm_gpio.c
@@ -24,6 +24,11 @@
#define IPROC_GPIO_SHIFT(pin) ((pin) % NGPIOS_PER_BANK)
+#define GPIO_BANK_CNT 5
+#define SEC_GPIO_SIZE 0x4
+#define IPROC_GPIO_SEC_CFG_REG(pin) \
+ (((GPIO_BANK_CNT - 1) - GPIO_BANK(pin)) * SEC_GPIO_SIZE)
+
static SLIST_HEAD(, bcm_gpio_chip) gclist = SLIST_HEAD_INITIALIZER(gclist);
struct bcm_gpio_chip *bcm_gpio_pin_to_chip(unsigned int pin)
@@ -146,6 +151,18 @@
};
KEEP_PAGER(bcm_gpio_ops);
+void iproc_gpio_set_secure(int gpiopin)
+{
+ vaddr_t regaddr = 0;
+ unsigned int shift = IPROC_GPIO_SHIFT(gpiopin);
+ vaddr_t baseaddr = (vaddr_t)phys_to_virt(CHIP_SECURE_GPIO_CONTROL0_BASE,
+ MEM_AREA_IO_SEC);
+
+ regaddr = baseaddr + IPROC_GPIO_SEC_CFG_REG(gpiopin);
+
+ io_clrbits32(regaddr, BIT(shift));
+}
+
static void iproc_gpio_init(struct bcm_gpio_chip *gc, unsigned int paddr,
unsigned int gpio_base, unsigned int ngpios)
{
diff --git a/core/include/drivers/bcm_gpio.h b/core/include/drivers/bcm_gpio.h
index 348592a..12de82b 100644
--- a/core/include/drivers/bcm_gpio.h
+++ b/core/include/drivers/bcm_gpio.h
@@ -26,6 +26,8 @@
SLIST_ENTRY(bcm_gpio_chip) link;
};
-/* returns bcm_gpio_chip handle for a GPIO pin */
+/* Returns bcm_gpio_chip handle for a GPIO pin */
struct bcm_gpio_chip *bcm_gpio_pin_to_chip(unsigned int pin);
+/* Set gpiopin as secure */
+void iproc_gpio_set_secure(int gpiopin);
#endif /* BCM_GPIO_H */