From c37fdbdbb0dd65cb4aa147c9cf9352901014be3b Mon Sep 17 00:00:00 2001 From: Hou Zhiqiang Date: Tue, 2 Aug 2016 19:03:24 +0800 Subject: [PATCH] fsl: csu: add an API to set individual device access permission Add this API to make the individual device is able to be set to the specified permission. Signed-off-by: Hou Zhiqiang Reviewed-by: York Sun --- board/freescale/common/ns_access.c | 34 ++++++++++++++++++------------ include/fsl_csu.h | 1 + 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/board/freescale/common/ns_access.c b/board/freescale/common/ns_access.c index d8d16c520f..c3d7a5e907 100644 --- a/board/freescale/common/ns_access.c +++ b/board/freescale/common/ns_access.c @@ -9,25 +9,31 @@ #include #include -static void enable_devices_ns_access(struct csu_ns_dev *ns_dev, uint32_t num) +void set_devices_ns_access(struct csu_ns_dev *ns_dev, u16 val) { u32 *base = (u32 *)CONFIG_SYS_FSL_CSU_ADDR; u32 *reg; - uint32_t val; - int i; + uint32_t tmp; - for (i = 0; i < num; i++) { - reg = base + ns_dev[i].ind / 2; - val = in_be32(reg); - if (ns_dev[i].ind % 2 == 0) { - val &= 0x0000ffff; - val |= ns_dev[i].val << 16; - } else { - val &= 0xffff0000; - val |= ns_dev[i].val; - } - out_be32(reg, val); + reg = base + ns_dev->ind / 2; + tmp = in_be32(reg); + if (ns_dev->ind % 2 == 0) { + tmp &= 0x0000ffff; + tmp |= val << 16; + } else { + tmp &= 0xffff0000; + tmp |= val; } + + out_be32(reg, tmp); +} + +static void enable_devices_ns_access(struct csu_ns_dev *ns_dev, uint32_t num) +{ + int i; + + for (i = 0; i < num; i++) + set_devices_ns_access(ns_dev + i, ns_dev[i].val); } void enable_layerscape_ns_access(void) diff --git a/include/fsl_csu.h b/include/fsl_csu.h index f4d97fb605..57a99859ee 100644 --- a/include/fsl_csu.h +++ b/include/fsl_csu.h @@ -30,5 +30,6 @@ struct csu_ns_dev { }; void enable_layerscape_ns_access(void); +void set_devices_ns_access(struct csu_ns_dev *ns_dev, u16 val); #endif -- 2.25.1