Hi khushbur,
The code to enable OCRAM was simply written by referring to the code as follows.
void mmap_init(uint8_t **pp_vaddr, uint64_t baddr, uint32_t size)
{
int fd;
fd = open("/dev/mem", O_RDWR | O_SYNC);
*pp_vaddr = (uint8_t *)mmap64(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, baddr);
close(fd);
}
void enable_layerscape_ns_access(void)
{
#define CSU_CSLX_OCRAM (4)
#define CSU_S_SUP_RW (0x22U)
uint32_t *base;
uint32_t *reg;
uint32_t val;
printf("%s\n", __func__);
mmap_init((uint8_t **)&base, 0x01510000, 0x1000);
reg = base + CSU_CSLX_OCRAM / 2U;
val = be32toh(*(volatile uint32_t*)((uintptr_t)reg));
if (CSU_CSLX_OCRAM % 2U == 0U) {
val &= 0x0000ffffU;
val |= CSU_S_SUP_RW << 16U;
} else {
val &= 0xffff0000U;
val |= CSU_S_SUP_RW;
}
*(volatile uint32_t*)(uintptr_t)reg = htobe32(val);
}
However, when reading the value with devmem, the value is not reflected.
[root@LS1012A ]# devmem 0x1510008
0xFF002200
[root@LS1012A ]# ./test
enable_layerscape_ns_access
[root@LS1012A ]# devmem 0x1510008
0xFF002200
[root@LS1012A ]#
What more do we need to do?
Thanks,
Gyosun.