From 520b5f6c5944b1a59ccafccade8dd347c87caf3d Mon Sep 17 00:00:00 2001 From: Michael Scire Date: Thu, 2 May 2019 17:56:04 -0700 Subject: [PATCH] boot: fix gpio configuration access errors --- stratosphere/boot/source/boot_gpio_utils.cpp | 24 ++++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/stratosphere/boot/source/boot_gpio_utils.cpp b/stratosphere/boot/source/boot_gpio_utils.cpp index 0ce420275..5c8cbaf39 100644 --- a/stratosphere/boot/source/boot_gpio_utils.cpp +++ b/stratosphere/boot/source/boot_gpio_utils.cpp @@ -18,7 +18,7 @@ #include "boot_gpio_map.hpp" static bool g_initialized_gpio_vaddr = false; -static void *g_gpio_vaddr = nullptr; +static uintptr_t g_gpio_vaddr = 0; static inline u32 GetGpioPadDescriptor(u32 gpio_pad_name) { if (gpio_pad_name >= GpioPadNameMax) { @@ -28,20 +28,20 @@ static inline u32 GetGpioPadDescriptor(u32 gpio_pad_name) { return GpioMap[gpio_pad_name]; } -static void *GetGpioBaseAddress() { +static uintptr_t GetGpioBaseAddress() { if (!g_initialized_gpio_vaddr) { u64 vaddr; if (R_FAILED(svcQueryIoMapping(&vaddr, Boot::GpioPhysicalBase, 0x1000))) { std::abort(); } - g_gpio_vaddr = reinterpret_cast(g_gpio_vaddr); + g_gpio_vaddr = vaddr; g_initialized_gpio_vaddr = true; } return g_gpio_vaddr; } u32 Boot::GpioConfigure(u32 gpio_pad_name) { - void *gpio_base_vaddr = GetGpioBaseAddress(); + uintptr_t gpio_base_vaddr = GetGpioBaseAddress(); /* Fetch this GPIO's pad descriptor */ const u32 gpio_pad_desc = GetGpioPadDescriptor(gpio_pad_name); @@ -58,16 +58,16 @@ u32 Boot::GpioConfigure(u32 gpio_pad_name) { u32 gpio_cnf_val = ((0x01 << ((gpio_pad_desc & 0x07) | 0x08)) | (0x01 << (gpio_pad_desc & 0x07))); /* Write to the appropriate GPIO_CNF_x register (upper offset) */ - *(reinterpret_cast(gpio_base_vaddr) + gpio_reg_offset + 0x80) = gpio_cnf_val; + *(reinterpret_cast(gpio_base_vaddr + gpio_reg_offset + 0x80)) = gpio_cnf_val; /* Do a dummy read from GPIO_CNF_x register (lower offset) */ - gpio_cnf_val = *(reinterpret_cast(gpio_base_vaddr) + gpio_reg_offset); + gpio_cnf_val = *(reinterpret_cast(gpio_base_vaddr + gpio_reg_offset)); return gpio_cnf_val; } u32 Boot::GpioSetDirection(u32 gpio_pad_name, GpioDirection dir) { - void *gpio_base_vaddr = GetGpioBaseAddress(); + uintptr_t gpio_base_vaddr = GetGpioBaseAddress(); /* Fetch this GPIO's pad descriptor */ const u32 gpio_pad_desc = GetGpioPadDescriptor(gpio_pad_name); @@ -84,16 +84,16 @@ u32 Boot::GpioSetDirection(u32 gpio_pad_name, GpioDirection dir) { u32 gpio_oe_val = ((0x01 << ((gpio_pad_desc & 0x07) | 0x08)) | (static_cast(dir) << (gpio_pad_desc & 0x07))); /* Write to the appropriate GPIO_OE_x register (upper offset) */ - *(reinterpret_cast(gpio_base_vaddr) + gpio_reg_offset + 0x90) = gpio_oe_val; + *(reinterpret_cast(gpio_base_vaddr + gpio_reg_offset + 0x90)) = gpio_oe_val; /* Do a dummy read from GPIO_OE_x register (lower offset) */ - gpio_oe_val = *(reinterpret_cast(gpio_base_vaddr) + gpio_reg_offset); + gpio_oe_val = *(reinterpret_cast(gpio_base_vaddr + gpio_reg_offset)); return gpio_oe_val; } u32 Boot::GpioSetValue(u32 gpio_pad_name, GpioValue val) { - void *gpio_base_vaddr = GetGpioBaseAddress(); + uintptr_t gpio_base_vaddr = GetGpioBaseAddress(); /* Fetch this GPIO's pad descriptor */ const u32 gpio_pad_desc = GetGpioPadDescriptor(gpio_pad_name); @@ -110,10 +110,10 @@ u32 Boot::GpioSetValue(u32 gpio_pad_name, GpioValue val) { u32 gpio_out_val = ((0x01 << ((gpio_pad_desc & 0x07) | 0x08)) | (static_cast(val) << (gpio_pad_desc & 0x07))); /* Write to the appropriate GPIO_OUT_x register (upper offset) */ - *(reinterpret_cast(gpio_base_vaddr) + gpio_reg_offset + 0xA0) = gpio_out_val; + *(reinterpret_cast(gpio_base_vaddr + gpio_reg_offset + 0xA0)) = gpio_out_val; /* Do a dummy read from GPIO_OUT_x register (lower offset) */ - gpio_out_val = *(reinterpret_cast(gpio_base_vaddr) + gpio_reg_offset); + gpio_out_val = *(reinterpret_cast(gpio_base_vaddr + gpio_reg_offset)); return gpio_out_val; }