Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1318)

Side by Side Diff: sim/bfin/dv-bfin_ebiu_amc.c

Issue 11969036: Merge GDB 7.5.1 (Closed) Base URL: http://git.chromium.org/native_client/nacl-gdb.git@master
Patch Set: Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « sim/bfin/devices.c ('k') | sim/bfin/dv-bfin_gpio2.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* Blackfin External Bus Interface Unit (EBIU) Asynchronous Memory Controller 1 /* Blackfin External Bus Interface Unit (EBIU) Asynchronous Memory Controller
2 (AMC) model. 2 (AMC) model.
3 3
4 Copyright (C) 2010-2012 Free Software Foundation, Inc. 4 Copyright (C) 2010-2012 Free Software Foundation, Inc.
5 Contributed by Analog Devices, Inc. 5 Contributed by Analog Devices, Inc.
6 6
7 This file is part of simulators. 7 This file is part of simulators.
8 8
9 This program is free software; you can redistribute it and/or modify 9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by 10 it under the terms of the GNU General Public License as published by
(...skipping 11 matching lines...) Expand all
22 #include "config.h" 22 #include "config.h"
23 23
24 #include "sim-main.h" 24 #include "sim-main.h"
25 #include "devices.h" 25 #include "devices.h"
26 #include "dv-bfin_ebiu_amc.h" 26 #include "dv-bfin_ebiu_amc.h"
27 27
28 struct bfin_ebiu_amc 28 struct bfin_ebiu_amc
29 { 29 {
30 bu32 base; 30 bu32 base;
31 int type; 31 int type;
32 bu32 bank_size; 32 bu32 bank_base, bank_size;
33 unsigned (*io_write) (struct hw *, const void *, int, address_word, 33 unsigned (*io_write) (struct hw *, const void *, int, address_word,
34 unsigned, struct bfin_ebiu_amc *, bu32, bu32); 34 unsigned, struct bfin_ebiu_amc *, bu32, bu32);
35 unsigned (*io_read) (struct hw *, void *, int, address_word, unsigned, 35 unsigned (*io_read) (struct hw *, void *, int, address_word, unsigned,
36 struct bfin_ebiu_amc *, bu32, void *, bu16 *, bu32 *); 36 struct bfin_ebiu_amc *, bu32, void *, bu16 *, bu32 *);
37 struct hw *slaves[4]; 37 struct hw *slaves[4];
38 38
39 /* Order after here is important -- matches hardware MMR layout. */ 39 /* Order after here is important -- matches hardware MMR layout. */
40 bu16 BFIN_MMR_16(amgctl); 40 bu16 BFIN_MMR_16(amgctl);
41 union { 41 union {
42 struct { 42 struct {
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
82 bu32 amben_old, amben, addr, i; 82 bu32 amben_old, amben, addr, i;
83 83
84 amben_old = MIN ((amc->amgctl >> 1) & 0x7, 4); 84 amben_old = MIN ((amc->amgctl >> 1) & 0x7, 4);
85 amben = MIN ((amgctl >> 1) & 0x7, 4); 85 amben = MIN ((amgctl >> 1) & 0x7, 4);
86 86
87 HW_TRACE ((me, "reattaching banks: AMGCTL 0x%04x[%u] -> 0x%04x[%u]", 87 HW_TRACE ((me, "reattaching banks: AMGCTL 0x%04x[%u] -> 0x%04x[%u]",
88 amc->amgctl, amben_old, amgctl, amben)); 88 amc->amgctl, amben_old, amgctl, amben));
89 89
90 for (i = 0; i < 4; ++i) 90 for (i = 0; i < 4; ++i)
91 { 91 {
92 addr = BFIN_EBIU_AMC_BASE + i * amc->bank_size; 92 addr = amc->bank_base + i * amc->bank_size;
93 93
94 if (i < amben_old) 94 if (i < amben_old)
95 { 95 {
96 HW_TRACE ((me, "detaching bank %u (%#x base)", i, addr)); 96 HW_TRACE ((me, "detaching bank %u (%#x base)", i, addr));
97 sim_core_detach (hw_system (me), NULL, 0, 0, addr); 97 sim_core_detach (hw_system (me), NULL, 0, 0, addr);
98 } 98 }
99 99
100 if (i < amben) 100 if (i < amben)
101 { 101 {
102 struct hw *slave = amc->slaves[i]; 102 struct hw *slave = amc->slaves[i];
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
328 int space, 328 int space,
329 address_word addr, 329 address_word addr,
330 address_word nr_bytes, 330 address_word nr_bytes,
331 struct hw *client) 331 struct hw *client)
332 { 332 {
333 struct bfin_ebiu_amc *amc = hw_data (me); 333 struct bfin_ebiu_amc *amc = hw_data (me);
334 334
335 HW_TRACE ((me, "attach - level=%d, space=%d, addr=0x%lx, nr_bytes=%lu, client= %s", 335 HW_TRACE ((me, "attach - level=%d, space=%d, addr=0x%lx, nr_bytes=%lu, client= %s",
336 level, space, (unsigned long) addr, (unsigned long) nr_bytes, hw_pa th (client))); 336 level, space, (unsigned long) addr, (unsigned long) nr_bytes, hw_pa th (client)));
337 337
338 if (addr + nr_bytes > 4) 338 if (addr + nr_bytes > ARRAY_SIZE (amc->slaves))
339 hw_abort (me, "ebiu amc attaches are done in terms of banks"); 339 hw_abort (me, "ebiu amc attaches are done in terms of banks");
340 340
341 while (nr_bytes--) 341 while (nr_bytes--)
342 amc->slaves[addr + nr_bytes] = client; 342 amc->slaves[addr + nr_bytes] = client;
343 343
344 bfin_ebiu_amc_write_amgctl (me, amc, amc->amgctl); 344 bfin_ebiu_amc_write_amgctl (me, amc, amc->amgctl);
345 } 345 }
346 346
347 static void 347 static void
348 attach_bfin_ebiu_amc_regs (struct hw *me, struct bfin_ebiu_amc *amc, 348 attach_bfin_ebiu_amc_regs (struct hw *me, struct bfin_ebiu_amc *amc,
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
394 394
395 switch (amc->type) 395 switch (amc->type)
396 { 396 {
397 case 500 ... 509: 397 case 500 ... 509:
398 amc->io_write = bf50x_ebiu_amc_io_write_buffer; 398 amc->io_write = bf50x_ebiu_amc_io_write_buffer;
399 amc->io_read = bf50x_ebiu_amc_io_read_buffer; 399 amc->io_read = bf50x_ebiu_amc_io_read_buffer;
400 mmr_names = bf50x_mmr_names; 400 mmr_names = bf50x_mmr_names;
401 reg_size = sizeof (amc->bf50x) + 4; 401 reg_size = sizeof (amc->bf50x) + 4;
402 402
403 /* Initialize the AMC. */ 403 /* Initialize the AMC. */
404 amc->bank_base = BFIN_EBIU_AMC_BASE;
404 amc->bank_size = 1 * 1024 * 1024; 405 amc->bank_size = 1 * 1024 * 1024;
405 amgctl = 0x00F3; 406 amgctl = 0x00F3;
406 amc->bf50x.ambctl0 = 0x0000FFC2; 407 amc->bf50x.ambctl0 = 0x0000FFC2;
407 amc->bf50x.ambctl1 = 0x0000FFC2; 408 amc->bf50x.ambctl1 = 0x0000FFC2;
408 amc->bf50x.mode = 0x0001; 409 amc->bf50x.mode = 0x0001;
409 amc->bf50x.fctl = 0x0002; 410 amc->bf50x.fctl = 0x0002;
410 break; 411 break;
411 case 540 ... 549: 412 case 540 ... 549:
412 amc->io_write = bf54x_ebiu_amc_io_write_buffer; 413 amc->io_write = bf54x_ebiu_amc_io_write_buffer;
413 amc->io_read = bf54x_ebiu_amc_io_read_buffer; 414 amc->io_read = bf54x_ebiu_amc_io_read_buffer;
414 mmr_names = bf54x_mmr_names; 415 mmr_names = bf54x_mmr_names;
415 reg_size = sizeof (amc->bf54x) + 4; 416 reg_size = sizeof (amc->bf54x) + 4;
416 417
417 /* Initialize the AMC. */ 418 /* Initialize the AMC. */
419 amc->bank_base = BFIN_EBIU_AMC_BASE;
418 amc->bank_size = 64 * 1024 * 1024; 420 amc->bank_size = 64 * 1024 * 1024;
419 amgctl = 0x0002; 421 amgctl = 0x0002;
420 amc->bf54x.ambctl0 = 0xFFC2FFC2; 422 amc->bf54x.ambctl0 = 0xFFC2FFC2;
421 amc->bf54x.ambctl1 = 0xFFC2FFC2; 423 amc->bf54x.ambctl1 = 0xFFC2FFC2;
422 amc->bf54x.fctl = 0x0006; 424 amc->bf54x.fctl = 0x0006;
423 break; 425 break;
424 case 510 ... 519: 426 case 510 ... 519:
425 case 522 ... 527: 427 case 522 ... 527:
426 case 531 ... 533: 428 case 531 ... 533:
427 case 534: 429 case 534:
428 case 536: 430 case 536:
429 case 537: 431 case 537:
430 case 538 ... 539: 432 case 538 ... 539:
431 case 561: 433 case 561:
432 amc->io_write = bf53x_ebiu_amc_io_write_buffer; 434 amc->io_write = bf53x_ebiu_amc_io_write_buffer;
433 amc->io_read = bf53x_ebiu_amc_io_read_buffer; 435 amc->io_read = bf53x_ebiu_amc_io_read_buffer;
434 mmr_names = bf53x_mmr_names; 436 mmr_names = bf53x_mmr_names;
435 reg_size = sizeof (amc->bf53x) + 4; 437 reg_size = sizeof (amc->bf53x) + 4;
436 438
437 /* Initialize the AMC. */ 439 /* Initialize the AMC. */
440 amc->bank_base = BFIN_EBIU_AMC_BASE;
438 if (amc->type == 561) 441 if (amc->type == 561)
439 amc->bank_size = 64 * 1024 * 1024; 442 amc->bank_size = 64 * 1024 * 1024;
440 else 443 else
441 amc->bank_size = 1 * 1024 * 1024; 444 amc->bank_size = 1 * 1024 * 1024;
442 amgctl = 0x00F2; 445 amgctl = 0x00F2;
443 amc->bf53x.ambctl0 = 0xFFC2FFC2; 446 amc->bf53x.ambctl0 = 0xFFC2FFC2;
444 amc->bf53x.ambctl1 = 0xFFC2FFC2; 447 amc->bf53x.ambctl1 = 0xFFC2FFC2;
445 break; 448 break;
446 case 590 ... 599: /* BF59x has no AMC. */ 449 case 590 ... 599: /* BF59x has no AMC. */
447 default: 450 default:
448 hw_abort (me, "no support for EBIU AMC on this Blackfin model yet"); 451 hw_abort (me, "no support for EBIU AMC on this Blackfin model yet");
449 } 452 }
450 453
451 attach_bfin_ebiu_amc_regs (me, amc, reg_size); 454 attach_bfin_ebiu_amc_regs (me, amc, reg_size);
452 455
453 bfin_ebiu_amc_write_amgctl (me, amc, amgctl); 456 bfin_ebiu_amc_write_amgctl (me, amc, amgctl);
454 } 457 }
455 458
456 const struct hw_descriptor dv_bfin_ebiu_amc_descriptor[] = 459 const struct hw_descriptor dv_bfin_ebiu_amc_descriptor[] =
457 { 460 {
458 {"bfin_ebiu_amc", bfin_ebiu_amc_finish,}, 461 {"bfin_ebiu_amc", bfin_ebiu_amc_finish,},
459 {NULL, NULL}, 462 {NULL, NULL},
460 }; 463 };
OLDNEW
« no previous file with comments | « sim/bfin/devices.c ('k') | sim/bfin/dv-bfin_gpio2.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698