diff options
Diffstat (limited to 'arch')
-rw-r--r-- | arch/powerpc/platforms/ps3/repository.c | 32 |
1 files changed, 19 insertions, 13 deletions
diff --git a/arch/powerpc/platforms/ps3/repository.c b/arch/powerpc/platforms/ps3/repository.c index 273a0d621bdd..9ef31a5b7035 100644 --- a/arch/powerpc/platforms/ps3/repository.c +++ b/arch/powerpc/platforms/ps3/repository.c | |||
@@ -257,7 +257,7 @@ int ps3_repository_read_dev_type(unsigned int bus_index, | |||
257 | 257 | ||
258 | int ps3_repository_read_dev_intr(unsigned int bus_index, | 258 | int ps3_repository_read_dev_intr(unsigned int bus_index, |
259 | unsigned int dev_index, unsigned int intr_index, | 259 | unsigned int dev_index, unsigned int intr_index, |
260 | unsigned int *intr_type, unsigned int* interrupt_id) | 260 | enum ps3_interrupt_type *intr_type, unsigned int* interrupt_id) |
261 | { | 261 | { |
262 | int result; | 262 | int result; |
263 | u64 v1; | 263 | u64 v1; |
@@ -275,7 +275,8 @@ int ps3_repository_read_dev_intr(unsigned int bus_index, | |||
275 | } | 275 | } |
276 | 276 | ||
277 | int ps3_repository_read_dev_reg_type(unsigned int bus_index, | 277 | int ps3_repository_read_dev_reg_type(unsigned int bus_index, |
278 | unsigned int dev_index, unsigned int reg_index, unsigned int *reg_type) | 278 | unsigned int dev_index, unsigned int reg_index, |
279 | enum ps3_reg_type *reg_type) | ||
279 | { | 280 | { |
280 | int result; | 281 | int result; |
281 | u64 v1; | 282 | u64 v1; |
@@ -302,8 +303,8 @@ int ps3_repository_read_dev_reg_addr(unsigned int bus_index, | |||
302 | } | 303 | } |
303 | 304 | ||
304 | int ps3_repository_read_dev_reg(unsigned int bus_index, | 305 | int ps3_repository_read_dev_reg(unsigned int bus_index, |
305 | unsigned int dev_index, unsigned int reg_index, unsigned int *reg_type, | 306 | unsigned int dev_index, unsigned int reg_index, |
306 | u64 *bus_addr, u64 *len) | 307 | enum ps3_reg_type *reg_type, u64 *bus_addr, u64 *len) |
307 | { | 308 | { |
308 | int result = ps3_repository_read_dev_reg_type(bus_index, dev_index, | 309 | int result = ps3_repository_read_dev_reg_type(bus_index, dev_index, |
309 | reg_index, reg_type); | 310 | reg_index, reg_type); |
@@ -343,7 +344,7 @@ int ps3_repository_dump_resource_info(unsigned int bus_index, | |||
343 | } | 344 | } |
344 | 345 | ||
345 | for (res_index = 0; res_index < 10; res_index++) { | 346 | for (res_index = 0; res_index < 10; res_index++) { |
346 | enum ps3_region_type reg_type; | 347 | enum ps3_reg_type reg_type; |
347 | u64 bus_addr; | 348 | u64 bus_addr; |
348 | u64 len; | 349 | u64 len; |
349 | 350 | ||
@@ -487,7 +488,8 @@ static int find_device(unsigned int bus_index, unsigned int num_dev, | |||
487 | break; | 488 | break; |
488 | } | 489 | } |
489 | 490 | ||
490 | BUG_ON(dev_index == num_dev); | 491 | if (dev_index == num_dev) |
492 | return -1; | ||
491 | 493 | ||
492 | pr_debug("%s:%d: found dev_type %u at dev_index %u\n", | 494 | pr_debug("%s:%d: found dev_type %u at dev_index %u\n", |
493 | __func__, __LINE__, dev_type, dev_index); | 495 | __func__, __LINE__, dev_type, dev_index); |
@@ -521,7 +523,7 @@ int ps3_repository_find_device (enum ps3_bus_type bus_type, | |||
521 | pr_debug("%s:%d: find bus_type %u, dev_type %u\n", __func__, __LINE__, | 523 | pr_debug("%s:%d: find bus_type %u, dev_type %u\n", __func__, __LINE__, |
522 | bus_type, dev_type); | 524 | bus_type, dev_type); |
523 | 525 | ||
524 | dev->bus_index = UINT_MAX; | 526 | BUG_ON(start_dev && start_dev->bus_index > 10); |
525 | 527 | ||
526 | for (bus_index = start_dev ? start_dev->bus_index : 0; bus_index < 10; | 528 | for (bus_index = start_dev ? start_dev->bus_index : 0; bus_index < 10; |
527 | bus_index++) { | 529 | bus_index++) { |
@@ -532,13 +534,15 @@ int ps3_repository_find_device (enum ps3_bus_type bus_type, | |||
532 | if (result) { | 534 | if (result) { |
533 | pr_debug("%s:%d read_bus_type failed\n", | 535 | pr_debug("%s:%d read_bus_type failed\n", |
534 | __func__, __LINE__); | 536 | __func__, __LINE__); |
537 | dev->bus_index = UINT_MAX; | ||
535 | return result; | 538 | return result; |
536 | } | 539 | } |
537 | if (x == bus_type) | 540 | if (x == bus_type) |
538 | break; | 541 | break; |
539 | } | 542 | } |
540 | 543 | ||
541 | BUG_ON(bus_index == 10); | 544 | if (bus_index >= 10) |
545 | return -ENODEV; | ||
542 | 546 | ||
543 | pr_debug("%s:%d: found bus_type %u at bus_index %u\n", | 547 | pr_debug("%s:%d: found bus_type %u at bus_index %u\n", |
544 | __func__, __LINE__, bus_type, bus_index); | 548 | __func__, __LINE__, bus_type, bus_index); |
@@ -604,7 +608,8 @@ int ps3_repository_find_interrupt(const struct ps3_repository_device *dev, | |||
604 | } | 608 | } |
605 | } | 609 | } |
606 | 610 | ||
607 | BUG_ON(res_index == 10); | 611 | if (res_index == 10) |
612 | return -ENODEV; | ||
608 | 613 | ||
609 | pr_debug("%s:%d: found intr_type %u at res_index %u\n", | 614 | pr_debug("%s:%d: found intr_type %u at res_index %u\n", |
610 | __func__, __LINE__, intr_type, res_index); | 615 | __func__, __LINE__, intr_type, res_index); |
@@ -612,8 +617,8 @@ int ps3_repository_find_interrupt(const struct ps3_repository_device *dev, | |||
612 | return result; | 617 | return result; |
613 | } | 618 | } |
614 | 619 | ||
615 | int ps3_repository_find_region(const struct ps3_repository_device *dev, | 620 | int ps3_repository_find_reg(const struct ps3_repository_device *dev, |
616 | enum ps3_region_type reg_type, u64 *bus_addr, u64 *len) | 621 | enum ps3_reg_type reg_type, u64 *bus_addr, u64 *len) |
617 | { | 622 | { |
618 | int result = 0; | 623 | int result = 0; |
619 | unsigned int res_index; | 624 | unsigned int res_index; |
@@ -623,7 +628,7 @@ int ps3_repository_find_region(const struct ps3_repository_device *dev, | |||
623 | *bus_addr = *len = 0; | 628 | *bus_addr = *len = 0; |
624 | 629 | ||
625 | for (res_index = 0; res_index < 10; res_index++) { | 630 | for (res_index = 0; res_index < 10; res_index++) { |
626 | enum ps3_region_type t; | 631 | enum ps3_reg_type t; |
627 | u64 a; | 632 | u64 a; |
628 | u64 l; | 633 | u64 l; |
629 | 634 | ||
@@ -643,7 +648,8 @@ int ps3_repository_find_region(const struct ps3_repository_device *dev, | |||
643 | } | 648 | } |
644 | } | 649 | } |
645 | 650 | ||
646 | BUG_ON(res_index == 10); | 651 | if (res_index == 10) |
652 | return -ENODEV; | ||
647 | 653 | ||
648 | pr_debug("%s:%d: found reg_type %u at res_index %u\n", | 654 | pr_debug("%s:%d: found reg_type %u at res_index %u\n", |
649 | __func__, __LINE__, reg_type, res_index); | 655 | __func__, __LINE__, reg_type, res_index); |