Преглед изворни кода

sh: initial PMB mapping iteration by helper macro.

All of the cached/uncached mapping setup is duplicated for each size, and
also misses out on the 16MB case. Rather than duplicating the same iter
code for that we just consolidate it in to a helper macro that builds an
iter for each size. The 16MB case is then trivially bolted on at the end.

Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Paul Mundt пре 15 година
родитељ
комит
77c2019fc1
1 измењених фајлова са 60 додато и 147 уклоњено
  1. 60 147
      arch/sh/kernel/head_32.S

+ 60 - 147
arch/sh/kernel/head_32.S

@@ -86,6 +86,62 @@ ENTRY(_stext)
 #endif
 
 #if defined(CONFIG_PMB) && !defined(CONFIG_PMB_LEGACY)
+
+#define __PMB_ITER_BY_SIZE(size)			\
+.L##size:						\
+	mov	#(size >> 4), r6;			\
+	shll16	r6;					\
+	shll8	r6;					\
+							\
+	cmp/hi	r5, r6;					\
+	bt	9999f;					\
+							\
+	mov	#(PMB_SZ_##size##M >> 2), r9;		\
+	shll2	r9;					\
+							\
+	/*						\
+	 * Cached mapping				\
+	 */						\
+	mov	#PMB_C, r8;				\
+	or	r0, r8;					\
+	or	r9, r8;					\
+	mov.l	r8, @r1;				\
+	mov.l	r2, @r3;				\
+							\
+	/* Increment to the next PMB_DATA entry */	\
+	add	r4, r1;					\
+	/* Increment to the next PMB_ADDR entry */	\
+	add	r4, r3;					\
+	/* Increment number of PMB entries */		\
+	add	#1, r10;				\
+							\
+	/*						\
+	 * Uncached mapping				\
+	 */						\
+	mov	#(PMB_UB >> 8), r8;			\
+	shll8	r8;					\
+							\
+	or	r0, r8;					\
+	or	r9, r8;					\
+	mov.l	r8, @r1;				\
+	mov	r2, r8;					\
+	add	r7, r8;					\
+	mov.l	r8, @r3;				\
+							\
+	/* Increment to the next PMB_DATA entry */	\
+	add	r4, r1;					\
+	/* Increment to the next PMB_ADDR entry */	\
+	add	r4, r3;					\
+	/* Increment number of PMB entries */		\
+	add	#1, r10;				\
+							\
+	sub	r6, r5;					\
+	add	r6, r0;					\
+	add	r6, r2;					\
+							\
+	bra	.L##size;				\
+9999:
+
 	/*
 	 * Reconfigure the initial PMB mappings setup by the hardware.
 	 *
@@ -142,154 +198,11 @@ ENTRY(_stext)
 	 * r9 = scratch register
 	 * r10 = number of PMB entries we've setup
 	 */
-.L512:
-	mov	#(512 >> 4), r6
-	shll16	r6
-	shll8	r6
-
-	cmp/hi	r5, r6
-	bt	.L128
-
-	mov	#(PMB_SZ_512M >> 2), r9
-	shll2	r9
-
-	/*
-	 * Cached mapping
-	 */
-	mov	#PMB_C, r8
-	or	r0, r8
-	or	r9, r8
-	mov.l	r8, @r1
-	mov.l	r2, @r3
-
-	add	r4, r1		/* Increment to the next PMB_DATA entry */
-	add	r4, r3		/* Increment to the next PMB_ADDR entry */
-
-	add	#1, r10		/* Increment number of PMB entries */
-
-	/*
-	 * Uncached mapping
-	 */
-	mov	#(PMB_UB >> 8), r8
-	shll8	r8
-
-	or	r0, r8
-	or	r9, r8
-	mov.l	r8, @r1
-	mov	r2, r8
-	add	r7, r8
-	mov.l	r8, @r3
-
-	add	r4, r1		/* Increment to the next PMB_DATA entry */
-	add	r4, r3		/* Increment to the next PMB_ADDR entry */
-
-	add	#1, r10		/* Increment number of PMB entries */
-
-	sub	r6, r5
-	add	r6, r0
-	add	r6, r2
-
-	bra	.L512
-
-.L128:
-	mov	#(128 >> 4), r6
-	shll16	r6
-	shll8	r6
-
-	cmp/hi	r5, r6
-	bt	.L64
-
-	mov	#(PMB_SZ_128M >> 2), r9
-	shll2	r9
-
-	/*
-	 * Cached mapping
-	 */
-	mov	#PMB_C, r8
-	or	r0, r8
-	or	r9, r8
-	mov.l	r8, @r1
-	mov.l	r2, @r3
-
-	add	r4, r1		/* Increment to the next PMB_DATA entry */
-	add	r4, r3		/* Increment to the next PMB_ADDR entry */
-
-	add	#1, r10		/* Increment number of PMB entries */
-
-	/*
-	 * Uncached mapping
-	 */
-	mov	#(PMB_UB >> 8), r8
-	shll8	r8
-
-	or	r0, r8
-	or	r9, r8
-	mov.l	r8, @r1
-	mov	r2, r8
-	add	r7, r8
-	mov.l	r8, @r3
-
-	add	r4, r1		/* Increment to the next PMB_DATA entry */
-	add	r4, r3		/* Increment to the next PMB_ADDR entry */
-
-	add	#1, r10		/* Increment number of PMB entries */
-
-	sub	r6, r5
-	add	r6, r0
-	add	r6, r2
-
-	bra	.L128
-
-.L64:
-	mov	#(64 >> 4), r6
-	shll16	r6
-	shll8	r6
-
-	cmp/hi	r5, r6
-	bt	.Ldone
-
-	mov	#(PMB_SZ_64M >> 2), r9
-	shll2	r9
-
-	/*
-	 * Cached mapping
-	 */
-	mov	#PMB_C, r8
-	or	r0, r8
-	or	r9, r8
-	mov.l	r8, @r1
-	mov.l	r2, @r3
-
-	add	r4, r1		/* Increment to the next PMB_DATA entry */
-	add	r4, r3		/* Increment to the next PMB_ADDR entry */
-
-	add	#1, r10		/* Increment number of PMB entries */
-
-	/*
-	 * Uncached mapping
-	 */
-	mov	#(PMB_UB >> 8), r8
-	shll8	r8
-
-	or	r0, r8
-	or	r9, r8
-	mov.l	r8, @r1
-	mov	r2, r8
-	add	r7, r8
-	mov.l	r8, @r3
-
-	add	r4, r1		/* Increment to the next PMB_DATA entry */
-	add	r4, r3		/* Increment to the next PMB_ADDR entry */
-
-	add	#1, r10		/* Increment number of PMB entries */
-
-	sub	r6, r5
-	add	r6, r0
-	add	r6, r2
-
-	bra	.L64
+	__PMB_ITER_BY_SIZE(512)
+	__PMB_ITER_BY_SIZE(128)
+	__PMB_ITER_BY_SIZE(64)
+	__PMB_ITER_BY_SIZE(16)
 
-.Ldone:
 	/* Update cached_to_uncached */
 	mov.l	.Lcached_to_uncached, r0
 	mov.l	r7, @r0