--- /dev/null
+M2DIR=../..
+include $(M2DIR)/software/common.mak
+
+OBJECTS=isr.o main.o
+
+all: memtest.bin
+
+# pull in dependency info for *existing* .o files
+-include $(OBJECTS:.o=.d)
+
+%.bin: %.elf
+ $(OBJCOPY) -O binary $< $@
+ chmod -x $@
+
+memtest.elf: $(OBJECTS) libs
+
+%.elf:
+ $(LD) $(LDFLAGS) \
+ -T $(M2DIR)/software/libbase/linker-sdram.ld \
+ -N -o $@ \
+ $(M2DIR)/software/libbase/crt0.o \
+ $(OBJECTS) \
+ -L$(M2DIR)/software/libbase \
+ -L$(M2DIR)/software/libcompiler-rt \
+ -lbase -lcompiler-rt
+ chmod -x $@
+
+main.o: main.c
+ $(compile-dep)
+
+%.o: %.c
+ $(compile-dep)
+
+%.o: %.S
+ $(assemble)
+
+libs:
+ $(MAKE) -C $(M2DIR)/software/libcompiler-rt
+ $(MAKE) -C $(M2DIR)/software/libbase
+
+load: memtest.bin
+ $(MAKE) -C $(M2DIR)/tools
+ $(M2DIR)/tools/flterm --port /dev/ttyUSB0 --kernel memtest.bin
+
+
+clean:
+ $(RM) $(OBJECTS) $(OBJECTS:.o=.d) memtest.elf memtest.bin
+ $(RM) .*~ *~
+
+.PHONY: all main.o clean libs load
--- /dev/null
+#include <hw/csr.h>
+#include <irq.h>
+#include <uart.h>
+
+void isr(void);
+void isr(void)
+{
+ unsigned int irqs;
+
+ irqs = irq_pending() & irq_getmask();
+
+ if(irqs & (1 << UART_INTERRUPT))
+ uart_isr();
+}
--- /dev/null
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <irq.h>
+#include <uart.h>
+#include <time.h>
+#include <hw/csr.h>
+#include <hw/flags.h>
+#include <console.h>
+
+static void membw_service(void)
+{
+ static int last_event;
+ unsigned long long int nr, nw;
+ unsigned long long int f;
+ unsigned int rdb, wrb;
+
+ if(elapsed(&last_event, identifier_frequency_read())) {
+ lasmicon_bandwidth_update_write(1);
+ nr = lasmicon_bandwidth_nreads_read();
+ nw = lasmicon_bandwidth_nwrites_read();
+ f = identifier_frequency_read();
+ rdb = nr*f >> (24 - 7);
+ wrb = nw*f >> (24 - 7);
+ printf("read:%4dMbps write:%4dMbps all:%4dMbps\n", rdb/1000000, wrb/1000000, (rdb + wrb)/1000000);
+ }
+}
+
+int main(void)
+{
+ irq_setmask(0);
+ irq_setie(1);
+ uart_init();
+
+ puts("Memory testing software built "__DATE__" "__TIME__"\n");
+
+ time_init();
+
+ while(1) {
+ membw_service();
+ }
+
+ return 0;
+}