diff options
Diffstat (limited to 'arch/m68k/amiga')
| -rw-r--r-- | arch/m68k/amiga/chipram.c | 2 | ||||
| -rw-r--r-- | arch/m68k/amiga/config.c | 63 | ||||
| -rw-r--r-- | arch/m68k/amiga/platform.c | 9 |
3 files changed, 49 insertions, 25 deletions
diff --git a/arch/m68k/amiga/chipram.c b/arch/m68k/amiga/chipram.c index 99449fbf9a72..ba03cec3f711 100644 --- a/arch/m68k/amiga/chipram.c +++ b/arch/m68k/amiga/chipram.c | |||
| @@ -87,7 +87,7 @@ void *amiga_chip_alloc_res(unsigned long size, struct resource *res) | |||
| 87 | 87 | ||
| 88 | atomic_sub(size, &chipavail); | 88 | atomic_sub(size, &chipavail); |
| 89 | pr_debug("amiga_chip_alloc_res: returning %pR\n", res); | 89 | pr_debug("amiga_chip_alloc_res: returning %pR\n", res); |
| 90 | return (void *)ZTWO_VADDR(res->start); | 90 | return ZTWO_VADDR(res->start); |
| 91 | } | 91 | } |
| 92 | 92 | ||
| 93 | void amiga_chip_free(void *ptr) | 93 | void amiga_chip_free(void *ptr) |
diff --git a/arch/m68k/amiga/config.c b/arch/m68k/amiga/config.c index b819390e29cd..9625b7132227 100644 --- a/arch/m68k/amiga/config.c +++ b/arch/m68k/amiga/config.c | |||
| @@ -28,6 +28,8 @@ | |||
| 28 | #include <linux/keyboard.h> | 28 | #include <linux/keyboard.h> |
| 29 | 29 | ||
| 30 | #include <asm/bootinfo.h> | 30 | #include <asm/bootinfo.h> |
| 31 | #include <asm/bootinfo-amiga.h> | ||
| 32 | #include <asm/byteorder.h> | ||
| 31 | #include <asm/setup.h> | 33 | #include <asm/setup.h> |
| 32 | #include <asm/pgtable.h> | 34 | #include <asm/pgtable.h> |
| 33 | #include <asm/amigahw.h> | 35 | #include <asm/amigahw.h> |
| @@ -140,46 +142,46 @@ static struct resource ram_resource[NUM_MEMINFO]; | |||
| 140 | * Parse an Amiga-specific record in the bootinfo | 142 | * Parse an Amiga-specific record in the bootinfo |
| 141 | */ | 143 | */ |
| 142 | 144 | ||
| 143 | int amiga_parse_bootinfo(const struct bi_record *record) | 145 | int __init amiga_parse_bootinfo(const struct bi_record *record) |
| 144 | { | 146 | { |
| 145 | int unknown = 0; | 147 | int unknown = 0; |
| 146 | const unsigned long *data = record->data; | 148 | const void *data = record->data; |
| 147 | 149 | ||
| 148 | switch (record->tag) { | 150 | switch (be16_to_cpu(record->tag)) { |
| 149 | case BI_AMIGA_MODEL: | 151 | case BI_AMIGA_MODEL: |
| 150 | amiga_model = *data; | 152 | amiga_model = be32_to_cpup(data); |
| 151 | break; | 153 | break; |
| 152 | 154 | ||
| 153 | case BI_AMIGA_ECLOCK: | 155 | case BI_AMIGA_ECLOCK: |
| 154 | amiga_eclock = *data; | 156 | amiga_eclock = be32_to_cpup(data); |
| 155 | break; | 157 | break; |
| 156 | 158 | ||
| 157 | case BI_AMIGA_CHIPSET: | 159 | case BI_AMIGA_CHIPSET: |
| 158 | amiga_chipset = *data; | 160 | amiga_chipset = be32_to_cpup(data); |
| 159 | break; | 161 | break; |
| 160 | 162 | ||
| 161 | case BI_AMIGA_CHIP_SIZE: | 163 | case BI_AMIGA_CHIP_SIZE: |
| 162 | amiga_chip_size = *(const int *)data; | 164 | amiga_chip_size = be32_to_cpup(data); |
| 163 | break; | 165 | break; |
| 164 | 166 | ||
| 165 | case BI_AMIGA_VBLANK: | 167 | case BI_AMIGA_VBLANK: |
| 166 | amiga_vblank = *(const unsigned char *)data; | 168 | amiga_vblank = *(const __u8 *)data; |
| 167 | break; | 169 | break; |
| 168 | 170 | ||
| 169 | case BI_AMIGA_PSFREQ: | 171 | case BI_AMIGA_PSFREQ: |
| 170 | amiga_psfreq = *(const unsigned char *)data; | 172 | amiga_psfreq = *(const __u8 *)data; |
| 171 | break; | 173 | break; |
| 172 | 174 | ||
| 173 | case BI_AMIGA_AUTOCON: | 175 | case BI_AMIGA_AUTOCON: |
| 174 | #ifdef CONFIG_ZORRO | 176 | #ifdef CONFIG_ZORRO |
| 175 | if (zorro_num_autocon < ZORRO_NUM_AUTO) { | 177 | if (zorro_num_autocon < ZORRO_NUM_AUTO) { |
| 176 | const struct ConfigDev *cd = (struct ConfigDev *)data; | 178 | const struct ConfigDev *cd = data; |
| 177 | struct zorro_dev *dev = &zorro_autocon[zorro_num_autocon++]; | 179 | struct zorro_dev_init *dev = &zorro_autocon_init[zorro_num_autocon++]; |
| 178 | dev->rom = cd->cd_Rom; | 180 | dev->rom = cd->cd_Rom; |
| 179 | dev->slotaddr = cd->cd_SlotAddr; | 181 | dev->slotaddr = be16_to_cpu(cd->cd_SlotAddr); |
| 180 | dev->slotsize = cd->cd_SlotSize; | 182 | dev->slotsize = be16_to_cpu(cd->cd_SlotSize); |
| 181 | dev->resource.start = (unsigned long)cd->cd_BoardAddr; | 183 | dev->boardaddr = be32_to_cpu(cd->cd_BoardAddr); |
| 182 | dev->resource.end = dev->resource.start + cd->cd_BoardSize - 1; | 184 | dev->boardsize = be32_to_cpu(cd->cd_BoardSize); |
| 183 | } else | 185 | } else |
| 184 | printk("amiga_parse_bootinfo: too many AutoConfig devices\n"); | 186 | printk("amiga_parse_bootinfo: too many AutoConfig devices\n"); |
| 185 | #endif /* CONFIG_ZORRO */ | 187 | #endif /* CONFIG_ZORRO */ |
| @@ -358,6 +360,14 @@ static void __init amiga_identify(void) | |||
| 358 | #undef AMIGAHW_ANNOUNCE | 360 | #undef AMIGAHW_ANNOUNCE |
| 359 | } | 361 | } |
| 360 | 362 | ||
| 363 | |||
| 364 | static unsigned long amiga_random_get_entropy(void) | ||
| 365 | { | ||
| 366 | /* VPOSR/VHPOSR provide at least 17 bits of data changing at 1.79 MHz */ | ||
| 367 | return *(unsigned long *)&amiga_custom.vposr; | ||
| 368 | } | ||
| 369 | |||
| 370 | |||
| 361 | /* | 371 | /* |
| 362 | * Setup the Amiga configuration info | 372 | * Setup the Amiga configuration info |
| 363 | */ | 373 | */ |
| @@ -395,6 +405,8 @@ void __init config_amiga(void) | |||
| 395 | mach_heartbeat = amiga_heartbeat; | 405 | mach_heartbeat = amiga_heartbeat; |
| 396 | #endif | 406 | #endif |
| 397 | 407 | ||
| 408 | mach_random_get_entropy = amiga_random_get_entropy; | ||
| 409 | |||
| 398 | /* Fill in the clock value (based on the 700 kHz E-Clock) */ | 410 | /* Fill in the clock value (based on the 700 kHz E-Clock) */ |
| 399 | amiga_colorclock = 5*amiga_eclock; /* 3.5 MHz */ | 411 | amiga_colorclock = 5*amiga_eclock; /* 3.5 MHz */ |
| 400 | 412 | ||
| @@ -608,6 +620,8 @@ static void amiga_mem_console_write(struct console *co, const char *s, | |||
| 608 | 620 | ||
| 609 | static int __init amiga_savekmsg_setup(char *arg) | 621 | static int __init amiga_savekmsg_setup(char *arg) |
| 610 | { | 622 | { |
| 623 | bool registered; | ||
| 624 | |||
| 611 | if (!MACH_IS_AMIGA || strcmp(arg, "mem")) | 625 | if (!MACH_IS_AMIGA || strcmp(arg, "mem")) |
| 612 | return 0; | 626 | return 0; |
| 613 | 627 | ||
| @@ -618,14 +632,16 @@ static int __init amiga_savekmsg_setup(char *arg) | |||
| 618 | 632 | ||
| 619 | /* Just steal the block, the chipram allocator isn't functional yet */ | 633 | /* Just steal the block, the chipram allocator isn't functional yet */ |
| 620 | amiga_chip_size -= SAVEKMSG_MAXMEM; | 634 | amiga_chip_size -= SAVEKMSG_MAXMEM; |
| 621 | savekmsg = (void *)ZTWO_VADDR(CHIP_PHYSADDR + amiga_chip_size); | 635 | savekmsg = ZTWO_VADDR(CHIP_PHYSADDR + amiga_chip_size); |
| 622 | savekmsg->magic1 = SAVEKMSG_MAGIC1; | 636 | savekmsg->magic1 = SAVEKMSG_MAGIC1; |
| 623 | savekmsg->magic2 = SAVEKMSG_MAGIC2; | 637 | savekmsg->magic2 = SAVEKMSG_MAGIC2; |
| 624 | savekmsg->magicptr = ZTWO_PADDR(savekmsg); | 638 | savekmsg->magicptr = ZTWO_PADDR(savekmsg); |
| 625 | savekmsg->size = 0; | 639 | savekmsg->size = 0; |
| 626 | 640 | ||
| 641 | registered = !!amiga_console_driver.write; | ||
| 627 | amiga_console_driver.write = amiga_mem_console_write; | 642 | amiga_console_driver.write = amiga_mem_console_write; |
| 628 | register_console(&amiga_console_driver); | 643 | if (!registered) |
| 644 | register_console(&amiga_console_driver); | ||
| 629 | return 0; | 645 | return 0; |
| 630 | } | 646 | } |
| 631 | 647 | ||
| @@ -707,11 +723,16 @@ void amiga_serial_gets(struct console *co, char *s, int len) | |||
| 707 | 723 | ||
| 708 | static int __init amiga_debug_setup(char *arg) | 724 | static int __init amiga_debug_setup(char *arg) |
| 709 | { | 725 | { |
| 710 | if (MACH_IS_AMIGA && !strcmp(arg, "ser")) { | 726 | bool registered; |
| 711 | /* no initialization required (?) */ | 727 | |
| 712 | amiga_console_driver.write = amiga_serial_console_write; | 728 | if (!MACH_IS_AMIGA || strcmp(arg, "ser")) |
| 729 | return 0; | ||
| 730 | |||
| 731 | /* no initialization required (?) */ | ||
| 732 | registered = !!amiga_console_driver.write; | ||
| 733 | amiga_console_driver.write = amiga_serial_console_write; | ||
| 734 | if (!registered) | ||
| 713 | register_console(&amiga_console_driver); | 735 | register_console(&amiga_console_driver); |
| 714 | } | ||
| 715 | return 0; | 736 | return 0; |
| 716 | } | 737 | } |
| 717 | 738 | ||
diff --git a/arch/m68k/amiga/platform.c b/arch/m68k/amiga/platform.c index dacd9f911f71..d34029d7b058 100644 --- a/arch/m68k/amiga/platform.c +++ b/arch/m68k/amiga/platform.c | |||
| @@ -13,6 +13,7 @@ | |||
| 13 | 13 | ||
| 14 | #include <asm/amigahw.h> | 14 | #include <asm/amigahw.h> |
| 15 | #include <asm/amigayle.h> | 15 | #include <asm/amigayle.h> |
| 16 | #include <asm/byteorder.h> | ||
| 16 | 17 | ||
| 17 | 18 | ||
| 18 | #ifdef CONFIG_ZORRO | 19 | #ifdef CONFIG_ZORRO |
| @@ -66,10 +67,12 @@ static int __init z_dev_present(zorro_id id) | |||
| 66 | { | 67 | { |
| 67 | unsigned int i; | 68 | unsigned int i; |
| 68 | 69 | ||
| 69 | for (i = 0; i < zorro_num_autocon; i++) | 70 | for (i = 0; i < zorro_num_autocon; i++) { |
| 70 | if (zorro_autocon[i].rom.er_Manufacturer == ZORRO_MANUF(id) && | 71 | const struct ExpansionRom *rom = &zorro_autocon_init[i].rom; |
| 71 | zorro_autocon[i].rom.er_Product == ZORRO_PROD(id)) | 72 | if (be16_to_cpu(rom->er_Manufacturer) == ZORRO_MANUF(id) && |
| 73 | rom->er_Product == ZORRO_PROD(id)) | ||
| 72 | return 1; | 74 | return 1; |
| 75 | } | ||
| 73 | 76 | ||
| 74 | return 0; | 77 | return 0; |
| 75 | } | 78 | } |
