1*34412edaSPankaj Gupta /* 2*34412edaSPankaj Gupta * Copyright 2020 NXP 3*34412edaSPankaj Gupta * 4*34412edaSPankaj Gupta * SPDX-License-Identifier: BSD-3-Clause 5*34412edaSPankaj Gupta * 6*34412edaSPankaj Gupta */ 7*34412edaSPankaj Gupta 8*34412edaSPankaj Gupta #include <endian.h> 9*34412edaSPankaj Gupta 10*34412edaSPankaj Gupta #include <common/debug.h> 11*34412edaSPankaj Gupta #include <csu.h> 12*34412edaSPankaj Gupta #include <lib/mmio.h> 13*34412edaSPankaj Gupta enable_layerscape_ns_access(struct csu_ns_dev_st * csu_ns_dev,uint32_t num,uintptr_t nxp_csu_addr)14*34412edaSPankaj Guptavoid enable_layerscape_ns_access(struct csu_ns_dev_st *csu_ns_dev, 15*34412edaSPankaj Gupta uint32_t num, uintptr_t nxp_csu_addr) 16*34412edaSPankaj Gupta { 17*34412edaSPankaj Gupta uint32_t *base = (uint32_t *)nxp_csu_addr; 18*34412edaSPankaj Gupta uint32_t *reg; 19*34412edaSPankaj Gupta uint32_t val; 20*34412edaSPankaj Gupta int i; 21*34412edaSPankaj Gupta 22*34412edaSPankaj Gupta for (i = 0; i < num; i++) { 23*34412edaSPankaj Gupta reg = base + csu_ns_dev[i].ind / 2U; 24*34412edaSPankaj Gupta val = be32toh(mmio_read_32((uintptr_t)reg)); 25*34412edaSPankaj Gupta if (csu_ns_dev[i].ind % 2U == 0U) { 26*34412edaSPankaj Gupta val &= 0x0000ffffU; 27*34412edaSPankaj Gupta val |= csu_ns_dev[i].val << 16U; 28*34412edaSPankaj Gupta } else { 29*34412edaSPankaj Gupta val &= 0xffff0000U; 30*34412edaSPankaj Gupta val |= csu_ns_dev[i].val; 31*34412edaSPankaj Gupta } 32*34412edaSPankaj Gupta mmio_write_32((uintptr_t)reg, htobe32(val)); 33*34412edaSPankaj Gupta } 34*34412edaSPankaj Gupta } 35