Commit 35ef81d6d2dd1e49a597e6ef44d0c64951ae933c
1 parent
c01c07bb
ETRAX: Correct size of control-register area.
Signed-off-by: Edgar E. Iglesias <edgar.iglesias@gmail.com> git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6209 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
18 additions
and
42 deletions
hw/etraxfs_eth.c
| @@ -297,18 +297,18 @@ static void mdio_cycle(struct qemu_mdio *bus) | @@ -297,18 +297,18 @@ static void mdio_cycle(struct qemu_mdio *bus) | ||
| 297 | /* ETRAX-FS Ethernet MAC block starts here. */ | 297 | /* ETRAX-FS Ethernet MAC block starts here. */ |
| 298 | 298 | ||
| 299 | #define RW_MA0_LO 0x00 | 299 | #define RW_MA0_LO 0x00 |
| 300 | -#define RW_MA0_HI 0x04 | ||
| 301 | -#define RW_MA1_LO 0x08 | ||
| 302 | -#define RW_MA1_HI 0x0c | ||
| 303 | -#define RW_GA_LO 0x10 | ||
| 304 | -#define RW_GA_HI 0x14 | ||
| 305 | -#define RW_GEN_CTRL 0x18 | ||
| 306 | -#define RW_REC_CTRL 0x1c | ||
| 307 | -#define RW_TR_CTRL 0x20 | ||
| 308 | -#define RW_CLR_ERR 0x24 | ||
| 309 | -#define RW_MGM_CTRL 0x28 | ||
| 310 | -#define R_STAT 0x2c | ||
| 311 | -#define FS_ETH_MAX_REGS 0x5c | 300 | +#define RW_MA0_HI 0x01 |
| 301 | +#define RW_MA1_LO 0x02 | ||
| 302 | +#define RW_MA1_HI 0x03 | ||
| 303 | +#define RW_GA_LO 0x04 | ||
| 304 | +#define RW_GA_HI 0x05 | ||
| 305 | +#define RW_GEN_CTRL 0x06 | ||
| 306 | +#define RW_REC_CTRL 0x07 | ||
| 307 | +#define RW_TR_CTRL 0x08 | ||
| 308 | +#define RW_CLR_ERR 0x09 | ||
| 309 | +#define RW_MGM_CTRL 0x0a | ||
| 310 | +#define R_STAT 0x0b | ||
| 311 | +#define FS_ETH_MAX_REGS 0x17 | ||
| 312 | 312 | ||
| 313 | struct fs_eth | 313 | struct fs_eth |
| 314 | { | 314 | { |
| @@ -360,42 +360,25 @@ static void eth_validate_duplex(struct fs_eth *eth) | @@ -360,42 +360,25 @@ static void eth_validate_duplex(struct fs_eth *eth) | ||
| 360 | } | 360 | } |
| 361 | } | 361 | } |
| 362 | 362 | ||
| 363 | -static uint32_t eth_rinvalid (void *opaque, target_phys_addr_t addr) | ||
| 364 | -{ | ||
| 365 | - struct fs_eth *eth = opaque; | ||
| 366 | - CPUState *env = eth->env; | ||
| 367 | - cpu_abort(env, "Unsupported short access. reg=" TARGET_FMT_plx "\n", | ||
| 368 | - addr); | ||
| 369 | - return 0; | ||
| 370 | -} | ||
| 371 | - | ||
| 372 | static uint32_t eth_readl (void *opaque, target_phys_addr_t addr) | 363 | static uint32_t eth_readl (void *opaque, target_phys_addr_t addr) |
| 373 | { | 364 | { |
| 374 | struct fs_eth *eth = opaque; | 365 | struct fs_eth *eth = opaque; |
| 375 | uint32_t r = 0; | 366 | uint32_t r = 0; |
| 376 | 367 | ||
| 368 | + addr >>= 2; | ||
| 369 | + | ||
| 377 | switch (addr) { | 370 | switch (addr) { |
| 378 | case R_STAT: | 371 | case R_STAT: |
| 379 | - /* Attach an MDIO/PHY abstraction. */ | ||
| 380 | r = eth->mdio_bus.mdio & 1; | 372 | r = eth->mdio_bus.mdio & 1; |
| 381 | break; | 373 | break; |
| 382 | default: | 374 | default: |
| 383 | r = eth->regs[addr]; | 375 | r = eth->regs[addr]; |
| 384 | - D(printf ("%s %x\n", __func__, addr)); | 376 | + D(printf ("%s %x\n", __func__, addr * 4)); |
| 385 | break; | 377 | break; |
| 386 | } | 378 | } |
| 387 | return r; | 379 | return r; |
| 388 | } | 380 | } |
| 389 | 381 | ||
| 390 | -static void | ||
| 391 | -eth_winvalid (void *opaque, target_phys_addr_t addr, uint32_t value) | ||
| 392 | -{ | ||
| 393 | - struct fs_eth *eth = opaque; | ||
| 394 | - CPUState *env = eth->env; | ||
| 395 | - cpu_abort(env, "Unsupported short access. reg=" TARGET_FMT_plx "\n", | ||
| 396 | - addr); | ||
| 397 | -} | ||
| 398 | - | ||
| 399 | static void eth_update_ma(struct fs_eth *eth, int ma) | 382 | static void eth_update_ma(struct fs_eth *eth, int ma) |
| 400 | { | 383 | { |
| 401 | int reg; | 384 | int reg; |
| @@ -425,20 +408,15 @@ eth_writel (void *opaque, target_phys_addr_t addr, uint32_t value) | @@ -425,20 +408,15 @@ eth_writel (void *opaque, target_phys_addr_t addr, uint32_t value) | ||
| 425 | { | 408 | { |
| 426 | struct fs_eth *eth = opaque; | 409 | struct fs_eth *eth = opaque; |
| 427 | 410 | ||
| 411 | + addr >>= 2; | ||
| 428 | switch (addr) | 412 | switch (addr) |
| 429 | { | 413 | { |
| 430 | case RW_MA0_LO: | 414 | case RW_MA0_LO: |
| 431 | - eth->regs[addr] = value; | ||
| 432 | - eth_update_ma(eth, 0); | ||
| 433 | - break; | ||
| 434 | case RW_MA0_HI: | 415 | case RW_MA0_HI: |
| 435 | eth->regs[addr] = value; | 416 | eth->regs[addr] = value; |
| 436 | eth_update_ma(eth, 0); | 417 | eth_update_ma(eth, 0); |
| 437 | break; | 418 | break; |
| 438 | case RW_MA1_LO: | 419 | case RW_MA1_LO: |
| 439 | - eth->regs[addr] = value; | ||
| 440 | - eth_update_ma(eth, 1); | ||
| 441 | - break; | ||
| 442 | case RW_MA1_HI: | 420 | case RW_MA1_HI: |
| 443 | eth->regs[addr] = value; | 421 | eth->regs[addr] = value; |
| 444 | eth_update_ma(eth, 1); | 422 | eth_update_ma(eth, 1); |
| @@ -553,14 +531,12 @@ static int eth_tx_push(void *opaque, unsigned char *buf, int len) | @@ -553,14 +531,12 @@ static int eth_tx_push(void *opaque, unsigned char *buf, int len) | ||
| 553 | } | 531 | } |
| 554 | 532 | ||
| 555 | static CPUReadMemoryFunc *eth_read[] = { | 533 | static CPUReadMemoryFunc *eth_read[] = { |
| 556 | - ð_rinvalid, | ||
| 557 | - ð_rinvalid, | 534 | + NULL, NULL, |
| 558 | ð_readl, | 535 | ð_readl, |
| 559 | }; | 536 | }; |
| 560 | 537 | ||
| 561 | static CPUWriteMemoryFunc *eth_write[] = { | 538 | static CPUWriteMemoryFunc *eth_write[] = { |
| 562 | - ð_winvalid, | ||
| 563 | - ð_winvalid, | 539 | + NULL, NULL, |
| 564 | ð_writel, | 540 | ð_writel, |
| 565 | }; | 541 | }; |
| 566 | 542 |