|
@@ -44,6 +44,7 @@
|
|
|
#include <asm/netlogic/haldefs.h>
|
|
|
#include <asm/netlogic/xlp-hal/iomap.h>
|
|
|
#include <asm/netlogic/xlp-hal/xlp.h>
|
|
|
+#include <asm/netlogic/xlp-hal/bridge.h>
|
|
|
#include <asm/netlogic/xlp-hal/pic.h>
|
|
|
#include <asm/netlogic/xlp-hal/sys.h>
|
|
|
|
|
@@ -142,3 +143,37 @@ unsigned int nlm_get_cpu_frequency(void)
|
|
|
{
|
|
|
return nlm_get_core_frequency(0, 0);
|
|
|
}
|
|
|
+
|
|
|
+/*
|
|
|
+ * Fills upto 8 pairs of entries containing the DRAM map of a node
|
|
|
+ * if n < 0, get dram map for all nodes
|
|
|
+ */
|
|
|
+int xlp_get_dram_map(int n, uint64_t *dram_map)
|
|
|
+{
|
|
|
+ uint64_t bridgebase, base, lim;
|
|
|
+ uint32_t val;
|
|
|
+ int i, node, rv;
|
|
|
+
|
|
|
+ /* Look only at mapping on Node 0, we don't handle crazy configs */
|
|
|
+ bridgebase = nlm_get_bridge_regbase(0);
|
|
|
+ rv = 0;
|
|
|
+ for (i = 0; i < 8; i++) {
|
|
|
+ val = nlm_read_bridge_reg(bridgebase,
|
|
|
+ BRIDGE_DRAM_NODE_TRANSLN(i));
|
|
|
+ node = (val >> 1) & 0x3;
|
|
|
+ if (n >= 0 && n != node)
|
|
|
+ continue;
|
|
|
+ val = nlm_read_bridge_reg(bridgebase, BRIDGE_DRAM_BAR(i));
|
|
|
+ val = (val >> 12) & 0xfffff;
|
|
|
+ base = (uint64_t) val << 20;
|
|
|
+ val = nlm_read_bridge_reg(bridgebase, BRIDGE_DRAM_LIMIT(i));
|
|
|
+ val = (val >> 12) & 0xfffff;
|
|
|
+ if (val == 0) /* BAR not used */
|
|
|
+ continue;
|
|
|
+ lim = ((uint64_t)val + 1) << 20;
|
|
|
+ dram_map[rv] = base;
|
|
|
+ dram_map[rv + 1] = lim;
|
|
|
+ rv += 2;
|
|
|
+ }
|
|
|
+ return rv;
|
|
|
+}
|