u32 dmactrl_val;
        int i;
        int ret = 0;
-       u32 *bufsizes;
        u32 bufsize;
-       int len;
 
        gr_set_address(dev, 0);
 
        INIT_LIST_HEAD(&dev->ep_list);
        gr_set_ep0state(dev, GR_EP0_DISCONNECT);
 
-       bufsizes = (u32 *)of_get_property(np, "epobufsizes", &len);
-       len /= sizeof(u32);
        for (i = 0; i < dev->nepo; i++) {
-               bufsize = (bufsizes && i < len) ? bufsizes[i] : 1024;
+               if (of_property_read_u32_index(np, "epobufsizes", i, &bufsize))
+                       bufsize = 1024;
                ret = gr_ep_init(dev, i, 0, bufsize);
                if (ret)
                        return ret;
        }
 
-       bufsizes = (u32 *)of_get_property(np, "epibufsizes", &len);
-       len /= sizeof(u32);
        for (i = 0; i < dev->nepi; i++) {
-               bufsize = (bufsizes && i < len) ? bufsizes[i] : 1024;
+               if (of_property_read_u32_index(np, "epibufsizes", i, &bufsize))
+                       bufsize = 1024;
                ret = gr_ep_init(dev, i, 1, bufsize);
                if (ret)
                        return ret;