https://elinux.org/index.php?title=Thread:Talk:R-Car/Boards/Yocto-Gen3/GPIO_access_problem_with_R-Car_Starter_Kit_Pro&feed=atom&action=historyThread:Talk:R-Car/Boards/Yocto-Gen3/GPIO access problem with R-Car Starter Kit Pro - Revision history2024-03-19T13:36:10ZRevision history for this page on the wikiMediaWiki 1.31.0https://elinux.org/index.php?title=Thread:Talk:R-Car/Boards/Yocto-Gen3/GPIO_access_problem_with_R-Car_Starter_Kit_Pro&diff=512261&oldid=prevKkouno: New thread: GPIO access problem with R-Car Starter Kit Pro2020-04-02T07:53:08Z<p>New thread: GPIO access problem with R-Car Starter Kit Pro</p>
<p><b>New page</b></p><div>Using R-Car Starterkit Pro, we are now developing a bear metal software which boots directly from ATF.<br />
However, we made slight modifications to ATF.<br />
<br />
We added the modifications described below when we built the software, where the program will boot in EL2 mode, instead of booting from ATF.<br />
Namely, we added modifications to plat/renesas/rcar/platform.mk.<br />
<br />
<pre><br />
225:# Process RCAR_BL33_EXECUTION_EL flag<br />
226:ifndef RCAR_BL33_EXECUTION_EL<br />
227:RCAR_BL33_EXECUTION_EL := 0 <--- We changed the value "0" to "1"<br />
228:endif<br />
229:$(eval $(call add_define,RCAR_BL33_EXECUTION_EL))<br />
</pre><br />
<br />
Using the conditions described above, we made codes below.<br />
<pre><br />
#define PFC_BASE (0xE6060000U)<br />
<br />
#define PFC_PMMR (PFC_BASE + 0x0000U)<br />
#define PFC_GPSR6 (PFC_BASE + 0x0118U)<br />
#define GPIO_INOUTSEL6 (GPIO_BASE + 0x5404U)<br />
<br />
static inline uint32_t mmio_read_32(uintptr_t addr)<br />
{<br />
return *(volatile uint32_t*)addr;<br />
}<br />
<br />
static inline void mmio_clrbits_32(uintptr_t addr, uint32_t clear)<br />
{<br />
mmio_write_32(addr, mmio_read_32(addr) & ~clear);<br />
}<br />
<br />
static inline void mmio_setbits_32(uintptr_t addr, uint32_t set)<br />
{<br />
mmio_write_32(addr, mmio_read_32(addr) | set);<br />
}<br />
<br />
int main(void)<br />
{<br />
UINT32_T reg;<br />
<br />
reg = mmio_read_32(PFC_PMMR);<br />
mmio_clrbits_32(PFC_PMMR, (UINT32_T)(1<<11|1<<12|1<<13));<br />
reg = mmio_read_32(PFC_PMMR);<br />
<br />
reg = mmio_read_32(PFC_GPSR6);<br />
mmio_clrbits_32(PFC_GPSR6, (UINT32_T)(1<<11|1<<12|1<<13));<br />
reg = mmio_read_32(PFC_GPSR6);<br />
reg = mmio_read_32(PFC_PMMR);<br />
<br />
reg = mmio_read_32(GPIO_INOUTSEL6);<br />
mmio_setbits_32(GPIO_INOUTSEL6, (UINT32_T)(1<<11|1<<12|1<<13));<br />
reg = mmio_read_32(GPIO_INOUTSEL6);<br />
<br />
return 0;<br />
}<br />
</pre><br />
<br />
This code processes GPIO resister settings.<br />
mmio_setbits_32() sets parameter values to GPIO resister. <br />
mmio_read_32() reads out GPIO resister values both pre- and post- GPIO resister settings.<br />
We got value "0x00013880" readout when we boot from ATF of Yocto ver. 2.12.<br />
However, we got value "0x00000000" when we boot from ATF of Yocto ver. 3.9.0.<br />
It seems GPIO settings are not properly set when we boot from ATF of Yocto ver. 3.9.0.<br />
<br />
We wonder if there are any changes made to accessing methods of GPIO setting resister between Yocto ver. 2.12. and ver. 3.9.0.?<br />
Further, how we can properly make GPIO settings in ATF of Yocto ver. 3.9.0.?</div>Kkouno