int __init ibmphp_access_ebda (void)
 {
-       u8 format, num_ctlrs, rio_complete, hs_complete;
+       u8 format, num_ctlrs, rio_complete, hs_complete, ebda_sz;
        u16 ebda_seg, num_entries, next_offset, offset, blk_id, sub_addr, re, rc_id, re_id, base;
        int rc = 0;
 
        iounmap (io_mem);
        debug ("returned ebda segment: %x\n", ebda_seg);
        
-       io_mem = ioremap(ebda_seg<<4, 1024);
+       io_mem = ioremap(ebda_seg<<4, 1);
+       ebda_sz = readb(io_mem);
+       iounmap(io_mem);
+       debug("ebda size: %d(KiB)\n", ebda_sz);
+       if (ebda_sz == 0)
+               return -ENOMEM;
+
+       io_mem = ioremap(ebda_seg<<4, (ebda_sz * 1024));
        if (!io_mem )
                return -ENOMEM;
        next_offset = 0x180;