Module Name: src
Committed By: matt
Date: Fri Dec 23 06:48:21 UTC 2011
Modified Files:
src/sys/arch/mips/mips [matt-nb5-mips64]:
bus_space_alignstride_chipdep.c
Log Message:
Add a fourth window
To generate a diff of this commit:
cvs rdiff -u -r1.10.18.13 -r1.10.18.14 \
src/sys/arch/mips/mips/bus_space_alignstride_chipdep.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/mips/mips/bus_space_alignstride_chipdep.c
diff -u src/sys/arch/mips/mips/bus_space_alignstride_chipdep.c:1.10.18.13 src/sys/arch/mips/mips/bus_space_alignstride_chipdep.c:1.10.18.14
--- src/sys/arch/mips/mips/bus_space_alignstride_chipdep.c:1.10.18.13 Wed May 25 23:58:47 2011
+++ src/sys/arch/mips/mips/bus_space_alignstride_chipdep.c Fri Dec 23 06:48:20 2011
@@ -556,6 +556,8 @@ __BS(init)(bus_space_tag_t t, void *v)
(void *)CHIP_EX_STORE(v), CHIP_EX_STORE_SIZE(v), EX_NOWAIT);
extent_alloc_region(ex, 0, ~0UL, EX_NOWAIT);
+ bool opened = false;
+
#ifdef CHIP_W1_BUS_START
/*
* The window may be disabled. We notice this by seeing
@@ -563,50 +565,94 @@ __BS(init)(bus_space_tag_t t, void *v)
*/
if (CHIP_W1_BUS_START(v) == (bus_addr_t) -1) {
#ifdef EXTENT_DEBUG
- printf("%s: this space is disabled\n", __S(__BS(init)));
+ printf("%s: window 1 is disabled\n", __S(__BS(init)));
#endif
- return;
+ } else {
+#ifdef EXTENT_DEBUG
+ printf("%s: window %d: freeing from %#lx to %#lx\n",
+ __func_, 1,
+ (u_long)CHIP_W1_BUS_START(v), (u_long)CHIP_W1_BUS_END(v));
+#endif
+ opened = true;
+ extent_free(ex, CHIP_W1_BUS_START(v),
+ CHIP_W1_BUS_END(v) - CHIP_W1_BUS_START(v) + 1, EX_NOWAIT);
}
-
+#endif /* CHIP_W1_BUS_START */
+#ifdef CHIP_W2_BUS_START
+ if (CHIP_W2_BUS_START(v) == (bus_addr_t) -1) {
#ifdef EXTENT_DEBUG
- printf("%s: freeing from %#"PRIxBUSADDR" to %#"PRIxBUSADDR"\n",
- __S(__BS(init)), (bus_addr_t)CHIP_W1_BUS_START(v),
- (bus_addr_t)CHIP_W1_BUS_END(v));
+ printf("%s: window 2 is disabled\n", __func__);
#endif
- extent_free(ex, CHIP_W1_BUS_START(v),
- CHIP_W1_BUS_END(v) - CHIP_W1_BUS_START(v) + 1, EX_NOWAIT);
-#endif
-#ifdef CHIP_W2_BUS_START
- if (CHIP_W2_BUS_START(v) != CHIP_W1_BUS_START(v)) {
+ } else if (CHIP_W2_BUS_START(v) != CHIP_W1_BUS_START(v)) {
#ifdef EXTENT_DEBUG
- printf("xxx: freeing from 0x%lx to 0x%lx\n",
+ printf("%s: window %d: freeing from %#lx to %#lx\n",
+ __func__, 2,
(u_long)CHIP_W2_BUS_START(v), (u_long)CHIP_W2_BUS_END(v));
#endif
+ opened = true;
extent_free(ex, CHIP_W2_BUS_START(v),
CHIP_W2_BUS_END(v) - CHIP_W2_BUS_START(v) + 1, EX_NOWAIT);
} else {
#ifdef EXTENT_DEBUG
- printf("xxx: window 2 (0x%lx to 0x%lx) overlaps window 1\n",
+ printf("%s: window 2 (0x%lx to 0x%lx) overlaps window 1\n",
+ __func__,
(u_long)CHIP_W2_BUS_START(v), (u_long)CHIP_W2_BUS_END(v));
#endif
}
-#endif
+#endif /* CHIP_W2_BUS_START */
#ifdef CHIP_W3_BUS_START
- if (CHIP_W3_BUS_START(v) != CHIP_W1_BUS_START(v) &&
- CHIP_W3_BUS_START(v) != CHIP_W2_BUS_START(v)) {
+ if (CHIP_W3_BUS_START(v) == (bus_addr_t) -1) {
+#ifdef EXTENT_DEBUG
+ printf("%s: window 3 is disabled\n", __func__);
+#endif
+ } else if (CHIP_W3_BUS_START(v) != CHIP_W1_BUS_START(v)
+ && CHIP_W3_BUS_START(v) != CHIP_W2_BUS_START(v)) {
#ifdef EXTENT_DEBUG
- printf("xxx: freeing from 0x%lx to 0x%lx\n",
+ printf("%s: window %d: freeing from %#lx to %#lx\n",
+ __func__, 3,
(u_long)CHIP_W3_BUS_START(v), (u_long)CHIP_W3_BUS_END(v));
#endif
+ opened = true;
extent_free(ex, CHIP_W3_BUS_START(v),
CHIP_W3_BUS_END(v) - CHIP_W3_BUS_START(v) + 1, EX_NOWAIT);
} else {
#ifdef EXTENT_DEBUG
- printf("xxx: window 2 (0x%lx to 0x%lx) overlaps window 1\n",
- (u_long)CHIP_W2_BUS_START(v), (u_long)CHIP_W2_BUS_END(v));
+ printf("%s: window 3 (0x%lx to 0x%lx) overlaps window 1 or 2\n",
+ __func__,
+ (u_long)CHIP_W3_BUS_START(v), (u_long)CHIP_W3_BUS_END(v));
+#endif
+ }
+#endif /* CHIP_W3_BUS_START */
+#ifdef CHIP_W4_BUS_START
+ if (CHIP_W4_BUS_START(v) == (bus_addr_t) -1) {
+#ifdef EXTENT_DEBUG
+ printf("%s: window 4 is disabled\n", __func__);
+#endif
+ } else if (CHIP_W4_BUS_START(v) != CHIP_W1_BUS_START(v)
+ && CHIP_W4_BUS_START(v) != CHIP_W2_BUS_START(v)
+ && CHIP_W4_BUS_START(v) != CHIP_W3_BUS_START(v)) {
+#ifdef EXTENT_DEBUG
+ printf("%s: window %d: freeing from %#lx to %#lx\n",
+ __func__, 5,
+ (u_long)CHIP_W4_BUS_START(v), (u_long)CHIP_W4_BUS_END(v));
+#endif
+ opened = true;
+ extent_free(ex, CHIP_W3_BUS_START(v),
+ CHIP_W4_BUS_END(v) - CHIP_W4_BUS_START(v) + 1, EX_NOWAIT);
+ } else {
+#ifdef EXTENT_DEBUG
+ printf("%s: window 4 (0x%lx to 0x%lx) overlaps window 1, 2, or 3\n",
+ __func__,
+ (u_long)CHIP_W4_BUS_START(v), (u_long)CHIP_W4_BUS_END(v));
#endif
}
+#endif /* CHIP_W3_BUS_START */
+
+ if (!opened) {
+#ifdef EXTENT_DEBUG
+ printf("%s: this space is disabled\n", __func__);
#endif
+ }
#ifdef EXTENT_DEBUG
extent_print(ex);
@@ -631,33 +677,62 @@ __BS(translate)(void *v, bus_addr_t addr
#endif
#ifdef CHIP_W1_BUS_START
- if (addr >= CHIP_W1_BUS_START(v) && end <= CHIP_W1_BUS_END(v))
+ if (CHIP_W1_BUS_START(v) != (bus_addr_t) -1
+ && addr >= CHIP_W1_BUS_START(v) && end <= CHIP_W1_BUS_END(v))
return (__BS(get_window)(v, 0, mbst));
#endif
#ifdef CHIP_W2_BUS_START
- if (addr >= CHIP_W2_BUS_START(v) && end <= CHIP_W2_BUS_END(v))
+ if (CHIP_W2_BUS_START(v) != (bus_addr_t) -1
+ && addr >= CHIP_W2_BUS_START(v) && end <= CHIP_W2_BUS_END(v))
return (__BS(get_window)(v, 1, mbst));
#endif
#ifdef CHIP_W3_BUS_START
- if (addr >= CHIP_W3_BUS_START(v) && end <= CHIP_W3_BUS_END(v))
+ if (CHIP_W3_BUS_START(v) != (bus_addr_t) -1
+ && addr >= CHIP_W3_BUS_START(v) && end <= CHIP_W3_BUS_END(v))
return (__BS(get_window)(v, 2, mbst));
#endif
+#ifdef CHIP_W4_BUS_START
+ if (CHIP_W4_BUS_START(v) != (bus_addr_t) -1
+ && addr >= CHIP_W4_BUS_START(v) && end <= CHIP_W4_BUS_END(v))
+ return (__BS(get_window)(v, 3, mbst));
+#endif
+
#ifdef EXTENT_DEBUG
printf("\n");
#ifdef CHIP_W1_BUS_START
- printf("%s: window[1]=0x%lx-0x%lx\n", __S(__BS(map)),
- (u_long)CHIP_W1_BUS_START(v), (u_long)CHIP_W1_BUS_END(v));
+ if (CHIP_W1_BUS_START(v) == (bus_addr_t) -1) {
+ printf("%s: window[1]=disabled\n", __S(__BS(map)));
+ } else {
+ printf("%s: window[1]=0x%lx-0x%lx\n", __S(__BS(map)),
+ (u_long)CHIP_W1_BUS_START(v), (u_long)CHIP_W1_BUS_END(v));
+ }
#endif
#ifdef CHIP_W2_BUS_START
- printf("%s: window[2]=0x%lx-0x%lx\n", __S(__BS(map)),
- (u_long)CHIP_W2_BUS_START(v), (u_long)CHIP_W2_BUS_END(v));
+ if (CHIP_W2_BUS_START(v) == (bus_addr_t) -1) {
+ printf("%s: window[2]=disabled\n", __S(__BS(map)));
+ } else {
+ printf("%s: window[2]=0x%lx-0x%lx\n", __S(__BS(map)),
+ (u_long)CHIP_W2_BUS_START(v), (u_long)CHIP_W2_BUS_END(v));
+ }
#endif
#ifdef CHIP_W3_BUS_START
- printf("%s: window[3]=0x%lx-0x%lx\n", __S(__BS(map)),
- (u_long)CHIP_W3_BUS_START(v), (u_long)CHIP_W3_BUS_END(v));
+ if (CHIP_W3_BUS_START(v) == (bus_addr_t) -1) {
+ printf("%s: window[3]=disabled\n", __S(__BS(map)));
+ } else {
+ printf("%s: window[3]=0x%lx-0x%lx\n", __S(__BS(map)),
+ (u_long)CHIP_W3_BUS_START(v), (u_long)CHIP_W3_BUS_END(v));
+ }
+#endif
+#ifdef CHIP_W4_BUS_START
+ if (CHIP_W4_BUS_START(v) == (bus_addr_t) -1) {
+ printf("%s: window[4]=disabled\n", __S(__BS(map)));
+ } else {
+ printf("%s: window[4]=0x%lx-0x%lx\n", __S(__BS(map)),
+ (u_long)CHIP_W4_BUS_START(v), (u_long)CHIP_W4_BUS_END(v));
+ }
#endif
#endif /* EXTENT_DEBUG */
/* No translation. */
@@ -702,9 +777,19 @@ __BS(get_window)(void *v, int window, st
break;
#endif
+#ifdef CHIP_W4_BUS_START
+ case 3:
+ mbst->mbst_bus_start = CHIP_W4_BUS_START(v);
+ mbst->mbst_bus_end = CHIP_W4_BUS_END(v);
+ mbst->mbst_sys_start = CHIP_W4_SYS_START(v);
+ mbst->mbst_sys_end = CHIP_W4_SYS_END(v);
+ mbst->mbst_align_stride = CHIP_ALIGN_STRIDE;
+ mbst->mbst_flags = 0;
+ break;
+#endif
+
default:
- panic(__S(__BS(get_window)) ": invalid window %d",
- window);
+ panic("%s: invalid window %d", __func__, window);
}
return (0);