This patch was from Mike Frysinger. I updated it to the current head. It makes bf537_stamp_bus_area only accept async memory addresses, which is the only memory region we can working on via BSR bus driver. Committed.

Jie
2010-02-01  Mike Frysinger  <[email protected]>

  * src/bus/bf537_stamp.c (ASYNC_MEM_BASE, ASYNC_MEM_SIZE, IS_ASYNC_ADDR,
    ASYNC_BANK): Define.
    (bf537_stamp_bus_area): Only accept IS_ASYNC_ADDR() addresses.
    (select_flash): Set AMS[] based on ASYNC_BANK(adr).
    (bf537_stamp_bus_read_start): Pass adr to select_flash().
    (bf537_stamp_bus_write): Likewise.

Index: src/bus/bf537_stamp.c
===================================================================
--- src/bus/bf537_stamp.c	(revision 1750)
+++ src/bus/bf537_stamp.c	(working copy)
@@ -154,26 +154,51 @@ bf537_stamp_bus_new (urj_chain_t *chain,
  * bus->driver->(*area)
  *
  */
+
+#define ASYNC_MEM_BASE 0x20000000
+#define ASYNC_MEM_SIZE (4 * 1024 * 1024)
+#define IS_ASYNC_ADDR(addr) ({ \
+       unsigned long __addr = (unsigned long) addr; \
+       __addr >= ASYNC_MEM_BASE && __addr < ASYNC_MEM_BASE + ASYNC_MEM_SIZE; \
+       })
+#define ASYNC_BANK(addr) (((addr) & (ASYNC_MEM_SIZE - 1)) >> 20)
+
 static int
 bf537_stamp_bus_area (urj_bus_t *bus, uint32_t adr, urj_bus_area_t *area)
 {
-    area->description = NULL;
-    area->start = UINT32_C (0x00000000);
-    area->length = UINT64_C (0x100000000);
-    area->width = 16;
-
+    if (adr < ASYNC_MEM_BASE)
+    {
+        /* we can only wiggle SDRAM pins directly, so cannot drive it */
+        urj_error_set (URJ_ERROR_OUT_OF_BOUNDS,
+		       _("reading external memory not supported"));
+        return URJ_STATUS_FAIL;
+    }
+    else if (IS_ASYNC_ADDR(adr))
+    {
+        area->description = "asynchronous memory";
+        area->start = ASYNC_MEM_BASE;
+        area->length = ASYNC_MEM_SIZE;
+        area->width = 16;
+    }
+    else
+    {
+        /* L1 needs core to access it */
+        urj_error_set (URJ_ERROR_OUT_OF_BOUNDS,
+		       _("reading on-chip memory not supported"));
+        return URJ_STATUS_FAIL;
+    }
     return URJ_STATUS_OK;
 }
 
 static void
-select_flash (urj_bus_t *bus)
+select_flash (urj_bus_t *bus, uint32_t adr)
 {
     urj_part_t *p = bus->part;
 
-    urj_part_set_signal (p, AMS[0], 1, 0);
-    urj_part_set_signal (p, AMS[1], 1, 1);
-    urj_part_set_signal (p, AMS[2], 1, 1);
-    urj_part_set_signal (p, AMS[3], 1, 1);
+    urj_part_set_signal (p, AMS[0], 1, !(ASYNC_BANK(adr) == 0));
+    urj_part_set_signal (p, AMS[1], 1, !(ASYNC_BANK(adr) == 1));
+    urj_part_set_signal (p, AMS[2], 1, !(ASYNC_BANK(adr) == 2));
+    urj_part_set_signal (p, AMS[3], 1, !(ASYNC_BANK(adr) == 3));
 
     urj_part_set_signal (p, ABE[0], 1, 0);
     urj_part_set_signal (p, ABE[1], 1, 0);
@@ -244,7 +269,7 @@ bf537_stamp_bus_read_start (urj_bus_t *b
     urj_part_t *p = bus->part;
     urj_chain_t *chain = bus->chain;
 
-    select_flash (bus);
+    select_flash (bus, adr);
     urj_part_set_signal (p, AOE, 1, 0);
     urj_part_set_signal (p, ARE, 1, 0);
     urj_part_set_signal (p, AWE, 1, 1);
@@ -313,7 +338,7 @@ bf537_stamp_bus_write (urj_bus_t *bus, u
     urj_part_t *p = bus->part;
     urj_chain_t *chain = bus->chain;
 
-    select_flash (bus);
+    select_flash (bus, adr);
     urj_part_set_signal (p, AOE, 1, 1);
     urj_part_set_signal (p, ARE, 1, 1);
 
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 1750)
+++ ChangeLog	(working copy)
@@ -1,3 +1,12 @@
+2010-02-01  Mike Frysinger  <[email protected]>
+
+  * src/bus/bf537_stamp.c (ASYNC_MEM_BASE, ASYNC_MEM_SIZE, IS_ASYNC_ADDR,
+    ASYNC_BANK): Define.
+    (bf537_stamp_bus_area): Only accept IS_ASYNC_ADDR() addresses.
+    (select_flash): Set AMS[] based on ASYNC_BANK(adr).
+    (bf537_stamp_bus_read_start): Pass adr to select_flash().
+    (bf537_stamp_bus_write): Likewise.
+
 2010-02-01  Jie Zhang  <[email protected]>
 
   * src/bus/bf533_ezkit.c: Remove.
------------------------------------------------------------------------------
The Planet: dedicated and managed hosting, cloud storage, colocation
Stay online with enterprise data centers and the best network in the business
Choose flexible plans and management services without long-term contracts
Personal 24x7 support from experience hosting pros just a phone call away.
http://p.sf.net/sfu/theplanet-com
_______________________________________________
UrJTAG-development mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/urjtag-development

Reply via email to