static void flashreset(void) { Flash *f; Flashtype *t; char *e; int bank; for(bank = 0; bank < Nbanks; bank++){ f = malloc(sizeof(*f)); if(f == nil){ print("#F%d: can't allocate Flash data\n", bank); return; } f->cmask = ~(ulong)0; if(archflashreset(bank, f) < 0 || f->type == nil || f->addr == nil){ free(f); return; } for(t = flash.types; t != nil; t = t->next) if(strcmp(f->type, t->name) == 0) break; if(t == nil){ iprint("#F%d: no flash driver for type %s (addr %p)\n", bank, f->type, f->addr); free(f); return; } f->reset = t->reset; f->protect = 1; if(f->reset(f) == 0){ flash.card[bank] = f; iprint("#F%d: %s addr %#p len %lud width %d interleave %d\n", // bank, f->type, PADDR(f->addr), f->size, bank, f->type, f->addr, f->size, f->width, f->interleave); e = flashnewpart(f, "flash", 0, f->size); if(e != nil) panic("#F%d: couldn't init table: %s", bank, e); }else iprint("#F%d: %#p: reset failed (%s)\n", bank, f->addr, f->type); } }