extern void prom_console_write_buf(const char *buf, int len);
 
 /* Prom's internal routines, don't use in kernel/boot code. */
-extern void prom_printf(const char *fmt, ...);
+extern __printf(1, 2) void prom_printf(const char *fmt, ...);
 extern void prom_write(const char *buf, unsigned int len);
 
 /* Multiprocessor operations... */
 
 extern void prom_console_write_buf(const char *buf, int len);
 
 /* Prom's internal routines, don't use in kernel/boot code. */
-extern void prom_printf(const char *fmt, ...);
+extern __printf(1, 2) void prom_printf(const char *fmt, ...);
 extern void prom_write(const char *buf, unsigned int len);
 
 /* Multiprocessor operations... */
 
 
 bad:
        prom_printf("HVAPI: Cannot register API group "
-                   "%lx with major(%u) minor(%u)\n",
+                   "%lx with major(%lu) minor(%lu)\n",
                    group, major, minor);
        prom_halt();
 }
 
        void *ret;
 
        if (!paddr) {
-               prom_printf("prom_early_alloc(%lu) failed\n");
+               prom_printf("prom_early_alloc(%lu) failed\n", size);
                prom_halt();
        }
 
 
        ecache_flush_physbase = find_ecache_flush_span(ecache_flush_size);
 
        if (ecache_flush_physbase == ~0UL) {
-               prom_printf("cheetah_ecache_flush_init: Cannot find %d byte "
+               prom_printf("cheetah_ecache_flush_init: Cannot find %ld byte "
                            "contiguous physical memory.\n",
                            ecache_flush_size);
                prom_halt();
 
 
        ret = prom_getproperty(node, property, (char *) regs, prop_size);
        if (ret == -1) {
-               prom_printf("Couldn't get %s property from /memory.\n");
+               prom_printf("Couldn't get %s property from /memory.\n",
+                               property);
                prom_halt();
        }
 
                prom_halt();
        }
        if (unlikely(n > sizeof(prom_trans))) {
-               prom_printf("prom_mappings: Size %Zd is too big.\n", n);
+               prom_printf("prom_mappings: Size %d is too big.\n", n);
                prom_halt();
        }
 
        unsigned long ret = sun4v_mmu_map_perm_addr(vaddr, 0, pte, mmu);
 
        if (ret != 0) {
-               prom_printf("hypervisor_tlb_lock[%lx:%lx:%lx:%lx]: "
+               prom_printf("hypervisor_tlb_lock[%lx:%x:%lx:%lx]: "
                            "errors with %lx\n", vaddr, 0, pte, mmu, ret);
                prom_halt();
        }
 
            it to us. */
         tmp = __get_free_pages(GFP_KERNEL, IOMMU_ORDER);
        if (!tmp) {
-               prom_printf("Unable to allocate iommu table [0x%08x]\n",
-                           IOMMU_NPTES*sizeof(iopte_t));
+               prom_printf("Unable to allocate iommu table [0x%lx]\n",
+                           IOMMU_NPTES * sizeof(iopte_t));
                prom_halt();
        }
        iommu->page_table = (iopte_t *)tmp;