Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

MIPS: GIC: Generate redirect block accessors

With CM 3.5 the "core-other" register block evolves into the "redirect"
register block, which is capable of accessing not only the core local
registers of other cores but also the shared/global registers of other
clusters.

This patch generates accessor functions for shared/global registers
accessed via the redirect block, with "redir_" inserted after "gic_" in
their names. For example the accessor function:

read_gic_config()

...accesses the GIC_CONFIG register of the GIC in the local cluster.
With this patch a new function:

read_gic_redir_config()

...is added which accesses the GIC_CONFIG register of the GIC in
whichever cluster the GCR_CL_REDIRECT register is configured to access.

This mirrors the similar redirect block accessors already provided for
the CM & CPC.

Reviewed-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Signed-off-by: Paul Burton <paulburton@kernel.org>
Signed-off-by: Chao-ying Fu <cfu@wavecomp.com>
Signed-off-by: Dragan Mladjenovic <dragan.mladjenovic@syrmia.com>
Signed-off-by: Aleksandar Rikalo <aleksandar.rikalo@syrmia.com>
Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>

authored by

Paul Burton and committed by
Thomas Bogendoerfer
680e7863 36675ac2

+34 -16
+34 -16
arch/mips/include/asm/mips-gic.h
··· 28 28 29 29 /* For read-only shared registers */ 30 30 #define GIC_ACCESSOR_RO(sz, off, name) \ 31 - CPS_ACCESSOR_RO(gic, sz, MIPS_GIC_SHARED_OFS + off, name) 31 + CPS_ACCESSOR_RO(gic, sz, MIPS_GIC_SHARED_OFS + off, name) \ 32 + CPS_ACCESSOR_RO(gic, sz, MIPS_GIC_REDIR_OFS + off, redir_##name) 32 33 33 34 /* For read-write shared registers */ 34 35 #define GIC_ACCESSOR_RW(sz, off, name) \ 35 - CPS_ACCESSOR_RW(gic, sz, MIPS_GIC_SHARED_OFS + off, name) 36 + CPS_ACCESSOR_RW(gic, sz, MIPS_GIC_SHARED_OFS + off, name) \ 37 + CPS_ACCESSOR_RW(gic, sz, MIPS_GIC_REDIR_OFS + off, redir_##name) 36 38 37 39 /* For read-only local registers */ 38 40 #define GIC_VX_ACCESSOR_RO(sz, off, name) \ ··· 47 45 CPS_ACCESSOR_RW(gic, sz, MIPS_GIC_REDIR_OFS + off, vo_##name) 48 46 49 47 /* For read-only shared per-interrupt registers */ 50 - #define GIC_ACCESSOR_RO_INTR_REG(sz, off, stride, name) \ 48 + #define _GIC_ACCESSOR_RO_INTR_REG(sz, off, stride, name) \ 51 49 static inline void __iomem *addr_gic_##name(unsigned int intr) \ 52 50 { \ 53 51 return mips_gic_base + (off) + (intr * (stride)); \ ··· 60 58 } 61 59 62 60 /* For read-write shared per-interrupt registers */ 63 - #define GIC_ACCESSOR_RW_INTR_REG(sz, off, stride, name) \ 64 - GIC_ACCESSOR_RO_INTR_REG(sz, off, stride, name) \ 61 + #define _GIC_ACCESSOR_RW_INTR_REG(sz, off, stride, name) \ 62 + _GIC_ACCESSOR_RO_INTR_REG(sz, off, stride, name) \ 65 63 \ 66 64 static inline void write_gic_##name(unsigned int intr, \ 67 65 unsigned int val) \ ··· 70 68 __raw_writel(val, addr_gic_##name(intr)); \ 71 69 } 72 70 71 + #define GIC_ACCESSOR_RO_INTR_REG(sz, off, stride, name) \ 72 + _GIC_ACCESSOR_RO_INTR_REG(sz, off, stride, name) \ 73 + _GIC_ACCESSOR_RO_INTR_REG(sz, MIPS_GIC_REDIR_OFS + off, stride, redir_##name) 74 + 75 + #define GIC_ACCESSOR_RW_INTR_REG(sz, off, stride, name) \ 76 + _GIC_ACCESSOR_RW_INTR_REG(sz, off, stride, name) \ 77 + _GIC_ACCESSOR_RW_INTR_REG(sz, MIPS_GIC_REDIR_OFS + off, stride, redir_##name) 78 + 73 79 /* For read-only local per-interrupt registers */ 74 80 #define GIC_VX_ACCESSOR_RO_INTR_REG(sz, off, stride, name) \ 75 - GIC_ACCESSOR_RO_INTR_REG(sz, MIPS_GIC_LOCAL_OFS + off, \ 81 + _GIC_ACCESSOR_RO_INTR_REG(sz, MIPS_GIC_LOCAL_OFS + off, \ 76 82 stride, vl_##name) \ 77 - GIC_ACCESSOR_RO_INTR_REG(sz, MIPS_GIC_REDIR_OFS + off, \ 83 + _GIC_ACCESSOR_RO_INTR_REG(sz, MIPS_GIC_REDIR_OFS + off, \ 78 84 stride, vo_##name) 79 85 80 86 /* For read-write local per-interrupt registers */ 81 87 #define GIC_VX_ACCESSOR_RW_INTR_REG(sz, off, stride, name) \ 82 - GIC_ACCESSOR_RW_INTR_REG(sz, MIPS_GIC_LOCAL_OFS + off, \ 88 + _GIC_ACCESSOR_RW_INTR_REG(sz, MIPS_GIC_LOCAL_OFS + off, \ 83 89 stride, vl_##name) \ 84 - GIC_ACCESSOR_RW_INTR_REG(sz, MIPS_GIC_REDIR_OFS + off, \ 90 + _GIC_ACCESSOR_RW_INTR_REG(sz, MIPS_GIC_REDIR_OFS + off, \ 85 91 stride, vo_##name) 86 92 87 93 /* For read-only shared bit-per-interrupt registers */ 88 - #define GIC_ACCESSOR_RO_INTR_BIT(off, name) \ 94 + #define _GIC_ACCESSOR_RO_INTR_BIT(off, name) \ 89 95 static inline void __iomem *addr_gic_##name(void) \ 90 96 { \ 91 97 return mips_gic_base + (off); \ ··· 116 106 } 117 107 118 108 /* For read-write shared bit-per-interrupt registers */ 119 - #define GIC_ACCESSOR_RW_INTR_BIT(off, name) \ 120 - GIC_ACCESSOR_RO_INTR_BIT(off, name) \ 109 + #define _GIC_ACCESSOR_RW_INTR_BIT(off, name) \ 110 + _GIC_ACCESSOR_RO_INTR_BIT(off, name) \ 121 111 \ 122 112 static inline void write_gic_##name(unsigned int intr) \ 123 113 { \ ··· 156 146 } \ 157 147 } 158 148 149 + #define GIC_ACCESSOR_RO_INTR_BIT(off, name) \ 150 + _GIC_ACCESSOR_RO_INTR_BIT(off, name) \ 151 + _GIC_ACCESSOR_RO_INTR_BIT(MIPS_GIC_REDIR_OFS + off, redir_##name) 152 + 153 + #define GIC_ACCESSOR_RW_INTR_BIT(off, name) \ 154 + _GIC_ACCESSOR_RW_INTR_BIT(off, name) \ 155 + _GIC_ACCESSOR_RW_INTR_BIT(MIPS_GIC_REDIR_OFS + off, redir_##name) 156 + 159 157 /* For read-only local bit-per-interrupt registers */ 160 158 #define GIC_VX_ACCESSOR_RO_INTR_BIT(sz, off, name) \ 161 159 GIC_ACCESSOR_RO_INTR_BIT(sz, MIPS_GIC_LOCAL_OFS + off, \ ··· 173 155 174 156 /* For read-write local bit-per-interrupt registers */ 175 157 #define GIC_VX_ACCESSOR_RW_INTR_BIT(sz, off, name) \ 176 - GIC_ACCESSOR_RW_INTR_BIT(sz, MIPS_GIC_LOCAL_OFS + off, \ 177 - vl_##name) \ 178 - GIC_ACCESSOR_RW_INTR_BIT(sz, MIPS_GIC_REDIR_OFS + off, \ 179 - vo_##name) 158 + _GIC_ACCESSOR_RW_INTR_BIT(sz, MIPS_GIC_LOCAL_OFS + off, \ 159 + vl_##name) \ 160 + _GIC_ACCESSOR_RW_INTR_BIT(sz, MIPS_GIC_REDIR_OFS + off, \ 161 + vo_##name) 180 162 181 163 /* GIC_SH_CONFIG - Information about the GIC configuration */ 182 164 GIC_ACCESSOR_RW(32, 0x000, config)