diff options
| -rw-r--r-- | arch/powerpc/Kconfig | 2 | ||||
| -rwxr-xr-x | arch/powerpc/boot/wrapper | 4 | ||||
| -rw-r--r-- | arch/powerpc/boot/zImage.lds.S | 5 | ||||
| -rw-r--r-- | arch/powerpc/kernel/rtas_flash.c | 47 | ||||
| -rw-r--r-- | arch/powerpc/platforms/cell/spu_base.c | 41 | ||||
| -rw-r--r-- | drivers/serial/cpm_uart/cpm_uart.h | 2 | ||||
| -rw-r--r-- | drivers/serial/cpm_uart/cpm_uart_core.c | 16 | ||||
| -rw-r--r-- | drivers/serial/cpm_uart/cpm_uart_cpm1.c | 2 |
8 files changed, 88 insertions, 31 deletions
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index 2bd9b7fb0f6c..0673dbedb241 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig | |||
| @@ -740,7 +740,7 @@ config ARCH_SPARSEMEM_ENABLE | |||
| 740 | 740 | ||
| 741 | config ARCH_SPARSEMEM_DEFAULT | 741 | config ARCH_SPARSEMEM_DEFAULT |
| 742 | def_bool y | 742 | def_bool y |
| 743 | depends on SMP && PPC_PSERIES | 743 | depends on (SMP && PPC_PSERIES) || PPC_CELL |
| 744 | 744 | ||
| 745 | config ARCH_POPULATES_NODE_MAP | 745 | config ARCH_POPULATES_NODE_MAP |
| 746 | def_bool y | 746 | def_bool y |
diff --git a/arch/powerpc/boot/wrapper b/arch/powerpc/boot/wrapper index eab7318729e9..b5fb1fee76f8 100755 --- a/arch/powerpc/boot/wrapper +++ b/arch/powerpc/boot/wrapper | |||
| @@ -179,11 +179,11 @@ if [ -z "$cacheit" ]; then | |||
| 179 | fi | 179 | fi |
| 180 | 180 | ||
| 181 | if [ -n "$initrd" ]; then | 181 | if [ -n "$initrd" ]; then |
| 182 | addsec $tmp "$initrd" initrd | 182 | addsec $tmp "$initrd" $isection |
| 183 | fi | 183 | fi |
| 184 | 184 | ||
| 185 | if [ -n "$dtb" ]; then | 185 | if [ -n "$dtb" ]; then |
| 186 | addsec $tmp "$dtb" dtb | 186 | addsec $tmp "$dtb" .kernel:dtb |
| 187 | fi | 187 | fi |
| 188 | 188 | ||
| 189 | if [ "$platform" != "miboot" ]; then | 189 | if [ "$platform" != "miboot" ]; then |
diff --git a/arch/powerpc/boot/zImage.lds.S b/arch/powerpc/boot/zImage.lds.S index 4b6bb3ffe3dc..4be3c6414b04 100644 --- a/arch/powerpc/boot/zImage.lds.S +++ b/arch/powerpc/boot/zImage.lds.S | |||
| @@ -21,6 +21,11 @@ SECTIONS | |||
| 21 | __got2_end = .; | 21 | __got2_end = .; |
| 22 | } | 22 | } |
| 23 | 23 | ||
| 24 | . = ALIGN(8); | ||
| 25 | _dtb_start = .; | ||
| 26 | .kernel:dtb : { *(.kernel:dtb) } | ||
| 27 | _dtb_end = .; | ||
| 28 | |||
| 24 | . = ALIGN(4096); | 29 | . = ALIGN(4096); |
| 25 | _vmlinux_start = .; | 30 | _vmlinux_start = .; |
| 26 | .kernel:vmlinux.strip : { *(.kernel:vmlinux.strip) } | 31 | .kernel:vmlinux.strip : { *(.kernel:vmlinux.strip) } |
diff --git a/arch/powerpc/kernel/rtas_flash.c b/arch/powerpc/kernel/rtas_flash.c index 1442b63a75da..6f6fc977cb39 100644 --- a/arch/powerpc/kernel/rtas_flash.c +++ b/arch/powerpc/kernel/rtas_flash.c | |||
| @@ -72,6 +72,10 @@ | |||
| 72 | #define VALIDATE_BUF_SIZE 4096 | 72 | #define VALIDATE_BUF_SIZE 4096 |
| 73 | #define RTAS_MSG_MAXLEN 64 | 73 | #define RTAS_MSG_MAXLEN 64 |
| 74 | 74 | ||
| 75 | /* Quirk - RTAS requires 4k list length and block size */ | ||
| 76 | #define RTAS_BLKLIST_LENGTH 4096 | ||
| 77 | #define RTAS_BLK_SIZE 4096 | ||
| 78 | |||
| 75 | struct flash_block { | 79 | struct flash_block { |
| 76 | char *data; | 80 | char *data; |
| 77 | unsigned long length; | 81 | unsigned long length; |
| @@ -83,7 +87,7 @@ struct flash_block { | |||
| 83 | * into a version/length and translate the pointers | 87 | * into a version/length and translate the pointers |
| 84 | * to absolute. | 88 | * to absolute. |
| 85 | */ | 89 | */ |
| 86 | #define FLASH_BLOCKS_PER_NODE ((PAGE_SIZE - 16) / sizeof(struct flash_block)) | 90 | #define FLASH_BLOCKS_PER_NODE ((RTAS_BLKLIST_LENGTH - 16) / sizeof(struct flash_block)) |
| 87 | struct flash_block_list { | 91 | struct flash_block_list { |
| 88 | unsigned long num_blocks; | 92 | unsigned long num_blocks; |
| 89 | struct flash_block_list *next; | 93 | struct flash_block_list *next; |
| @@ -96,6 +100,9 @@ struct flash_block_list_header { /* just the header of flash_block_list */ | |||
| 96 | 100 | ||
| 97 | static struct flash_block_list_header rtas_firmware_flash_list = {0, NULL}; | 101 | static struct flash_block_list_header rtas_firmware_flash_list = {0, NULL}; |
| 98 | 102 | ||
| 103 | /* Use slab cache to guarantee 4k alignment */ | ||
| 104 | static kmem_cache_t *flash_block_cache = NULL; | ||
| 105 | |||
| 99 | #define FLASH_BLOCK_LIST_VERSION (1UL) | 106 | #define FLASH_BLOCK_LIST_VERSION (1UL) |
| 100 | 107 | ||
| 101 | /* Local copy of the flash block list. | 108 | /* Local copy of the flash block list. |
| @@ -153,7 +160,7 @@ static int flash_list_valid(struct flash_block_list *flist) | |||
| 153 | return FLASH_IMG_NULL_DATA; | 160 | return FLASH_IMG_NULL_DATA; |
| 154 | } | 161 | } |
| 155 | block_size = f->blocks[i].length; | 162 | block_size = f->blocks[i].length; |
| 156 | if (block_size <= 0 || block_size > PAGE_SIZE) { | 163 | if (block_size <= 0 || block_size > RTAS_BLK_SIZE) { |
| 157 | return FLASH_IMG_BAD_LEN; | 164 | return FLASH_IMG_BAD_LEN; |
| 158 | } | 165 | } |
| 159 | image_size += block_size; | 166 | image_size += block_size; |
| @@ -177,9 +184,9 @@ static void free_flash_list(struct flash_block_list *f) | |||
| 177 | 184 | ||
| 178 | while (f) { | 185 | while (f) { |
| 179 | for (i = 0; i < f->num_blocks; i++) | 186 | for (i = 0; i < f->num_blocks; i++) |
| 180 | free_page((unsigned long)(f->blocks[i].data)); | 187 | kmem_cache_free(flash_block_cache, f->blocks[i].data); |
| 181 | next = f->next; | 188 | next = f->next; |
| 182 | free_page((unsigned long)f); | 189 | kmem_cache_free(flash_block_cache, f); |
| 183 | f = next; | 190 | f = next; |
| 184 | } | 191 | } |
| 185 | } | 192 | } |
| @@ -278,6 +285,12 @@ static ssize_t rtas_flash_read(struct file *file, char __user *buf, | |||
| 278 | return msglen; | 285 | return msglen; |
| 279 | } | 286 | } |
| 280 | 287 | ||
| 288 | /* constructor for flash_block_cache */ | ||
| 289 | void rtas_block_ctor(void *ptr, kmem_cache_t *cache, unsigned long flags) | ||
| 290 | { | ||
| 291 | memset(ptr, 0, RTAS_BLK_SIZE); | ||
| 292 | } | ||
| 293 | |||
| 281 | /* We could be much more efficient here. But to keep this function | 294 | /* We could be much more efficient here. But to keep this function |
| 282 | * simple we allocate a page to the block list no matter how small the | 295 | * simple we allocate a page to the block list no matter how small the |
| 283 | * count is. If the system is low on memory it will be just as well | 296 | * count is. If the system is low on memory it will be just as well |
| @@ -302,7 +315,7 @@ static ssize_t rtas_flash_write(struct file *file, const char __user *buffer, | |||
| 302 | * proc file | 315 | * proc file |
| 303 | */ | 316 | */ |
| 304 | if (uf->flist == NULL) { | 317 | if (uf->flist == NULL) { |
| 305 | uf->flist = (struct flash_block_list *) get_zeroed_page(GFP_KERNEL); | 318 | uf->flist = kmem_cache_alloc(flash_block_cache, GFP_KERNEL); |
| 306 | if (!uf->flist) | 319 | if (!uf->flist) |
| 307 | return -ENOMEM; | 320 | return -ENOMEM; |
| 308 | } | 321 | } |
| @@ -313,21 +326,21 @@ static ssize_t rtas_flash_write(struct file *file, const char __user *buffer, | |||
| 313 | next_free = fl->num_blocks; | 326 | next_free = fl->num_blocks; |
| 314 | if (next_free == FLASH_BLOCKS_PER_NODE) { | 327 | if (next_free == FLASH_BLOCKS_PER_NODE) { |
| 315 | /* Need to allocate another block_list */ | 328 | /* Need to allocate another block_list */ |
| 316 | fl->next = (struct flash_block_list *)get_zeroed_page(GFP_KERNEL); | 329 | fl->next = kmem_cache_alloc(flash_block_cache, GFP_KERNEL); |
| 317 | if (!fl->next) | 330 | if (!fl->next) |
| 318 | return -ENOMEM; | 331 | return -ENOMEM; |
| 319 | fl = fl->next; | 332 | fl = fl->next; |
| 320 | next_free = 0; | 333 | next_free = 0; |
| 321 | } | 334 | } |
| 322 | 335 | ||
| 323 | if (count > PAGE_SIZE) | 336 | if (count > RTAS_BLK_SIZE) |
| 324 | count = PAGE_SIZE; | 337 | count = RTAS_BLK_SIZE; |
| 325 | p = (char *)get_zeroed_page(GFP_KERNEL); | 338 | p = kmem_cache_alloc(flash_block_cache, GFP_KERNEL); |
| 326 | if (!p) | 339 | if (!p) |
| 327 | return -ENOMEM; | 340 | return -ENOMEM; |
| 328 | 341 | ||
| 329 | if(copy_from_user(p, buffer, count)) { | 342 | if(copy_from_user(p, buffer, count)) { |
| 330 | free_page((unsigned long)p); | 343 | kmem_cache_free(flash_block_cache, p); |
| 331 | return -EFAULT; | 344 | return -EFAULT; |
| 332 | } | 345 | } |
| 333 | fl->blocks[next_free].data = p; | 346 | fl->blocks[next_free].data = p; |
| @@ -791,6 +804,16 @@ int __init rtas_flash_init(void) | |||
| 791 | goto cleanup; | 804 | goto cleanup; |
| 792 | 805 | ||
| 793 | rtas_flash_term_hook = rtas_flash_firmware; | 806 | rtas_flash_term_hook = rtas_flash_firmware; |
| 807 | |||
| 808 | flash_block_cache = kmem_cache_create("rtas_flash_cache", | ||
| 809 | RTAS_BLK_SIZE, RTAS_BLK_SIZE, 0, | ||
| 810 | rtas_block_ctor, NULL); | ||
| 811 | if (!flash_block_cache) { | ||
| 812 | printk(KERN_ERR "%s: failed to create block cache\n", | ||
| 813 | __FUNCTION__); | ||
| 814 | rc = -ENOMEM; | ||
| 815 | goto cleanup; | ||
| 816 | } | ||
| 794 | return 0; | 817 | return 0; |
| 795 | 818 | ||
| 796 | cleanup: | 819 | cleanup: |
| @@ -805,6 +828,10 @@ cleanup: | |||
| 805 | void __exit rtas_flash_cleanup(void) | 828 | void __exit rtas_flash_cleanup(void) |
| 806 | { | 829 | { |
| 807 | rtas_flash_term_hook = NULL; | 830 | rtas_flash_term_hook = NULL; |
| 831 | |||
| 832 | if (flash_block_cache) | ||
| 833 | kmem_cache_destroy(flash_block_cache); | ||
| 834 | |||
| 808 | remove_flash_pde(firmware_flash_pde); | 835 | remove_flash_pde(firmware_flash_pde); |
| 809 | remove_flash_pde(firmware_update_pde); | 836 | remove_flash_pde(firmware_update_pde); |
| 810 | remove_flash_pde(validate_pde); | 837 | remove_flash_pde(validate_pde); |
diff --git a/arch/powerpc/platforms/cell/spu_base.c b/arch/powerpc/platforms/cell/spu_base.c index d0fb959e3ef1..7aa809d5a244 100644 --- a/arch/powerpc/platforms/cell/spu_base.c +++ b/arch/powerpc/platforms/cell/spu_base.c | |||
| @@ -655,14 +655,19 @@ static int __init spu_map_interrupts(struct spu *spu, struct device_node *np) | |||
| 655 | 655 | ||
| 656 | for (i=0; i < 3; i++) { | 656 | for (i=0; i < 3; i++) { |
| 657 | ret = of_irq_map_one(np, i, &oirq); | 657 | ret = of_irq_map_one(np, i, &oirq); |
| 658 | if (ret) | 658 | if (ret) { |
| 659 | pr_debug("spu_new: failed to get irq %d\n", i); | ||
| 659 | goto err; | 660 | goto err; |
| 660 | 661 | } | |
| 661 | ret = -EINVAL; | 662 | ret = -EINVAL; |
| 663 | pr_debug(" irq %d no 0x%x on %s\n", i, oirq.specifier[0], | ||
| 664 | oirq.controller->full_name); | ||
| 662 | spu->irqs[i] = irq_create_of_mapping(oirq.controller, | 665 | spu->irqs[i] = irq_create_of_mapping(oirq.controller, |
| 663 | oirq.specifier, oirq.size); | 666 | oirq.specifier, oirq.size); |
| 664 | if (spu->irqs[i] == NO_IRQ) | 667 | if (spu->irqs[i] == NO_IRQ) { |
| 668 | pr_debug("spu_new: failed to map it !\n"); | ||
| 665 | goto err; | 669 | goto err; |
| 670 | } | ||
| 666 | } | 671 | } |
| 667 | return 0; | 672 | return 0; |
| 668 | 673 | ||
| @@ -681,7 +686,7 @@ static int spu_map_resource(struct device_node *node, int nr, | |||
| 681 | struct resource resource = { }; | 686 | struct resource resource = { }; |
| 682 | int ret; | 687 | int ret; |
| 683 | 688 | ||
| 684 | ret = of_address_to_resource(node, 0, &resource); | 689 | ret = of_address_to_resource(node, nr, &resource); |
| 685 | if (ret) | 690 | if (ret) |
| 686 | goto out; | 691 | goto out; |
| 687 | 692 | ||
| @@ -704,22 +709,42 @@ static int __init spu_map_device(struct spu *spu, struct device_node *node) | |||
| 704 | 709 | ||
| 705 | ret = spu_map_resource(node, 0, (void __iomem**)&spu->local_store, | 710 | ret = spu_map_resource(node, 0, (void __iomem**)&spu->local_store, |
| 706 | &spu->local_store_phys); | 711 | &spu->local_store_phys); |
| 707 | if (ret) | 712 | if (ret) { |
| 713 | pr_debug("spu_new: failed to map %s resource 0\n", | ||
| 714 | node->full_name); | ||
| 708 | goto out; | 715 | goto out; |
| 716 | } | ||
| 709 | ret = spu_map_resource(node, 1, (void __iomem**)&spu->problem, | 717 | ret = spu_map_resource(node, 1, (void __iomem**)&spu->problem, |
| 710 | &spu->problem_phys); | 718 | &spu->problem_phys); |
| 711 | if (ret) | 719 | if (ret) { |
| 720 | pr_debug("spu_new: failed to map %s resource 1\n", | ||
| 721 | node->full_name); | ||
| 712 | goto out_unmap; | 722 | goto out_unmap; |
| 723 | } | ||
| 713 | ret = spu_map_resource(node, 2, (void __iomem**)&spu->priv2, | 724 | ret = spu_map_resource(node, 2, (void __iomem**)&spu->priv2, |
| 714 | NULL); | 725 | NULL); |
| 715 | if (ret) | 726 | if (ret) { |
| 727 | pr_debug("spu_new: failed to map %s resource 2\n", | ||
| 728 | node->full_name); | ||
| 716 | goto out_unmap; | 729 | goto out_unmap; |
| 730 | } | ||
| 717 | 731 | ||
| 718 | if (!firmware_has_feature(FW_FEATURE_LPAR)) | 732 | if (!firmware_has_feature(FW_FEATURE_LPAR)) |
| 719 | ret = spu_map_resource(node, 3, (void __iomem**)&spu->priv1, | 733 | ret = spu_map_resource(node, 3, (void __iomem**)&spu->priv1, |
| 720 | NULL); | 734 | NULL); |
| 721 | if (ret) | 735 | if (ret) { |
| 736 | pr_debug("spu_new: failed to map %s resource 3\n", | ||
| 737 | node->full_name); | ||
| 722 | goto out_unmap; | 738 | goto out_unmap; |
| 739 | } | ||
| 740 | pr_debug("spu_new: %s maps:\n", node->full_name); | ||
| 741 | pr_debug(" local store : 0x%016lx -> 0x%p\n", | ||
| 742 | spu->local_store_phys, spu->local_store); | ||
| 743 | pr_debug(" problem state : 0x%016lx -> 0x%p\n", | ||
| 744 | spu->problem_phys, spu->problem); | ||
| 745 | pr_debug(" priv2 : 0x%p\n", spu->priv2); | ||
| 746 | pr_debug(" priv1 : 0x%p\n", spu->priv1); | ||
| 747 | |||
| 723 | return 0; | 748 | return 0; |
| 724 | 749 | ||
| 725 | out_unmap: | 750 | out_unmap: |
diff --git a/drivers/serial/cpm_uart/cpm_uart.h b/drivers/serial/cpm_uart/cpm_uart.h index a8f894c78194..69715e556506 100644 --- a/drivers/serial/cpm_uart/cpm_uart.h +++ b/drivers/serial/cpm_uart/cpm_uart.h | |||
| @@ -88,7 +88,7 @@ extern struct uart_cpm_port cpm_uart_ports[UART_NR]; | |||
| 88 | 88 | ||
| 89 | /* these are located in their respective files */ | 89 | /* these are located in their respective files */ |
| 90 | void cpm_line_cr_cmd(int line, int cmd); | 90 | void cpm_line_cr_cmd(int line, int cmd); |
| 91 | int cpm_uart_init_portdesc(void); | 91 | int __init cpm_uart_init_portdesc(void); |
| 92 | int cpm_uart_allocbuf(struct uart_cpm_port *pinfo, unsigned int is_con); | 92 | int cpm_uart_allocbuf(struct uart_cpm_port *pinfo, unsigned int is_con); |
| 93 | void cpm_uart_freebuf(struct uart_cpm_port *pinfo); | 93 | void cpm_uart_freebuf(struct uart_cpm_port *pinfo); |
| 94 | 94 | ||
diff --git a/drivers/serial/cpm_uart/cpm_uart_core.c b/drivers/serial/cpm_uart/cpm_uart_core.c index 0abb544ae63d..7a3b97fdf8d1 100644 --- a/drivers/serial/cpm_uart/cpm_uart_core.c +++ b/drivers/serial/cpm_uart/cpm_uart_core.c | |||
| @@ -195,10 +195,8 @@ static void cpm_uart_start_tx(struct uart_port *port) | |||
| 195 | if (cpm_uart_tx_pump(port) != 0) { | 195 | if (cpm_uart_tx_pump(port) != 0) { |
| 196 | if (IS_SMC(pinfo)) { | 196 | if (IS_SMC(pinfo)) { |
| 197 | smcp->smc_smcm |= SMCM_TX; | 197 | smcp->smc_smcm |= SMCM_TX; |
| 198 | smcp->smc_smcmr |= SMCMR_TEN; | ||
| 199 | } else { | 198 | } else { |
| 200 | sccp->scc_sccm |= UART_SCCM_TX; | 199 | sccp->scc_sccm |= UART_SCCM_TX; |
| 201 | pinfo->sccp->scc_gsmrl |= SCC_GSMRL_ENT; | ||
| 202 | } | 200 | } |
| 203 | } | 201 | } |
| 204 | } | 202 | } |
| @@ -421,9 +419,10 @@ static int cpm_uart_startup(struct uart_port *port) | |||
| 421 | /* Startup rx-int */ | 419 | /* Startup rx-int */ |
| 422 | if (IS_SMC(pinfo)) { | 420 | if (IS_SMC(pinfo)) { |
| 423 | pinfo->smcp->smc_smcm |= SMCM_RX; | 421 | pinfo->smcp->smc_smcm |= SMCM_RX; |
| 424 | pinfo->smcp->smc_smcmr |= SMCMR_REN; | 422 | pinfo->smcp->smc_smcmr |= (SMCMR_REN | SMCMR_TEN); |
| 425 | } else { | 423 | } else { |
| 426 | pinfo->sccp->scc_sccm |= UART_SCCM_RX; | 424 | pinfo->sccp->scc_sccm |= UART_SCCM_RX; |
| 425 | pinfo->sccp->scc_gsmrl |= (SCC_GSMRL_ENR | SCC_GSMRL_ENT); | ||
| 427 | } | 426 | } |
| 428 | 427 | ||
| 429 | if (!(pinfo->flags & FLAG_CONSOLE)) | 428 | if (!(pinfo->flags & FLAG_CONSOLE)) |
| @@ -1350,11 +1349,10 @@ static int cpm_uart_init(void) { | |||
| 1350 | pr_info("cpm_uart: WARNING: no UART devices found on platform bus!\n"); | 1349 | pr_info("cpm_uart: WARNING: no UART devices found on platform bus!\n"); |
| 1351 | pr_info( | 1350 | pr_info( |
| 1352 | "cpm_uart: the driver will guess configuration, but this mode is no longer supported.\n"); | 1351 | "cpm_uart: the driver will guess configuration, but this mode is no longer supported.\n"); |
| 1353 | #ifndef CONFIG_SERIAL_CPM_CONSOLE | 1352 | |
| 1354 | ret = cpm_uart_init_portdesc(); | 1353 | /* Don't run this again, if the console driver did it already */ |
| 1355 | if (ret) | 1354 | if (cpm_uart_nr == 0) |
| 1356 | return ret; | 1355 | cpm_uart_init_portdesc(); |
| 1357 | #endif | ||
| 1358 | 1356 | ||
| 1359 | cpm_reg.nr = cpm_uart_nr; | 1357 | cpm_reg.nr = cpm_uart_nr; |
| 1360 | ret = uart_register_driver(&cpm_reg); | 1358 | ret = uart_register_driver(&cpm_reg); |
| @@ -1366,6 +1364,8 @@ static int cpm_uart_init(void) { | |||
| 1366 | int con = cpm_uart_port_map[i]; | 1364 | int con = cpm_uart_port_map[i]; |
| 1367 | cpm_uart_ports[con].port.line = i; | 1365 | cpm_uart_ports[con].port.line = i; |
| 1368 | cpm_uart_ports[con].port.flags = UPF_BOOT_AUTOCONF; | 1366 | cpm_uart_ports[con].port.flags = UPF_BOOT_AUTOCONF; |
| 1367 | if (cpm_uart_ports[con].set_lineif) | ||
| 1368 | cpm_uart_ports[con].set_lineif(&cpm_uart_ports[con]); | ||
| 1369 | uart_add_one_port(&cpm_reg, &cpm_uart_ports[con].port); | 1369 | uart_add_one_port(&cpm_reg, &cpm_uart_ports[con].port); |
| 1370 | } | 1370 | } |
| 1371 | 1371 | ||
diff --git a/drivers/serial/cpm_uart/cpm_uart_cpm1.c b/drivers/serial/cpm_uart/cpm_uart_cpm1.c index 95afc37297a8..08e55fdc882a 100644 --- a/drivers/serial/cpm_uart/cpm_uart_cpm1.c +++ b/drivers/serial/cpm_uart/cpm_uart_cpm1.c | |||
| @@ -184,7 +184,7 @@ void cpm_uart_freebuf(struct uart_cpm_port *pinfo) | |||
| 184 | } | 184 | } |
| 185 | 185 | ||
| 186 | /* Setup any dynamic params in the uart desc */ | 186 | /* Setup any dynamic params in the uart desc */ |
| 187 | int cpm_uart_init_portdesc(void) | 187 | int __init cpm_uart_init_portdesc(void) |
| 188 | { | 188 | { |
| 189 | pr_debug("CPM uart[-]:init portdesc\n"); | 189 | pr_debug("CPM uart[-]:init portdesc\n"); |
| 190 | 190 | ||
