Index: kernel/arch/ppc32/src/ppc32.c
===================================================================
--- kernel/arch/ppc32/src/ppc32.c	(revision 6bf5b8cd8ea2cab6203e1dd42e25d90fd7628fa6)
+++ kernel/arch/ppc32/src/ppc32.c	(revision 7f7d64298fbfdc2ce850eb86156d829a4def23e6)
@@ -237,11 +237,8 @@
 #ifdef CONFIG_MAC_KBD
 		uintptr_t pa = assigned_address[0].addr + 0x16000;
-		uintptr_t aligned_addr = ALIGN_DOWN(pa, PAGE_SIZE);
-		size_t offset = pa - aligned_addr;
 		size_t size = 2 * PAGE_SIZE;
 
-		cuda_t *cuda = (cuda_t *) (km_map(aligned_addr, offset + size,
-		    KM_NATURAL_ALIGNMENT,
-		    PAGE_WRITE | PAGE_NOT_CACHEABLE) + offset);
+		cuda_t *cuda = (cuda_t *) km_map(pa, size, KM_NATURAL_ALIGNMENT,
+		    PAGE_WRITE | PAGE_NOT_CACHEABLE);
 
 		/* Initialize I/O controller */
Index: kernel/arch/sparc64/src/drivers/kbd.c
===================================================================
--- kernel/arch/sparc64/src/drivers/kbd.c	(revision 6bf5b8cd8ea2cab6203e1dd42e25d90fd7628fa6)
+++ kernel/arch/sparc64/src/drivers/kbd.c	(revision 7f7d64298fbfdc2ce850eb86156d829a4def23e6)
@@ -109,15 +109,6 @@
 	}
 
-	/*
-	 * We need to pass aligned address to hw_map().
-	 * However, the physical keyboard address can
-	 * be pretty much unaligned, depending on the
-	 * underlying controller.
-	 */
-	uintptr_t aligned_addr = ALIGN_DOWN(pa, PAGE_SIZE);
-	size_t offset = pa - aligned_addr;
-
-	ioport8_t *ns16550 = (ioport8_t *) (km_map(aligned_addr, offset + size,
-	    KM_NATURAL_ALIGNMENT, PAGE_WRITE | PAGE_NOT_CACHEABLE) + offset);
+	ioport8_t *ns16550 = (ioport8_t *) km_map(pa, size,
+	    KM_NATURAL_ALIGNMENT, PAGE_WRITE | PAGE_NOT_CACHEABLE);
 
 	ns16550_instance_t *ns16550_instance = ns16550_init(ns16550, 0, inr, cir,
