From owner-svn-src-user@FreeBSD.ORG Sat Jul 3 21:02:12 2010 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 1BAB31065672; Sat, 3 Jul 2010 21:02:12 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 0B6888FC17; Sat, 3 Jul 2010 21:02:12 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o63L2BYY024580; Sat, 3 Jul 2010 21:02:11 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o63L2Bl3024578; Sat, 3 Jul 2010 21:02:11 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <201007032102.o63L2Bl3024578@svn.freebsd.org> From: Nathan Whitehorn Date: Sat, 3 Jul 2010 21:02:11 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r209674 - user/nwhitehorn/ps3/dev/ofw X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 03 Jul 2010 21:02:12 -0000 Author: nwhitehorn Date: Sat Jul 3 21:02:11 2010 New Revision: 209674 URL: http://svn.freebsd.org/changeset/base/209674 Log: "Fix" some things in ofw_fdt for 64-bit systems. The basic problem is that this code uses pointers into the device tree as package handles, but the PPC OF spec has package handles as 32-bit quantities. Maybe offsets into the DT blob could be used instead? In any case, this change is fine on powerpc64/aim, since device trees will always be loaded at boot time and thus are guaranteed to be in 32-bit accessible memory. Also, kill some dependence on things in /dev/fdt, which are unimplemented (and unnecessary) for the time being. Modified: user/nwhitehorn/ps3/dev/ofw/ofw_fdt.c Modified: user/nwhitehorn/ps3/dev/ofw/ofw_fdt.c ============================================================================== --- user/nwhitehorn/ps3/dev/ofw/ofw_fdt.c Sat Jul 3 20:48:43 2010 (r209673) +++ user/nwhitehorn/ps3/dev/ofw/ofw_fdt.c Sat Jul 3 21:02:11 2010 (r209674) @@ -39,7 +39,9 @@ __FBSDID("$FreeBSD$"); #include +#ifndef __powerpc__ #include +#endif #include #include @@ -120,11 +122,11 @@ fdt_phandle_offset(phandle_t p) dt_struct = (const char *)fdtp + fdt_off_dt_struct(fdtp); - if (((const char *)p < dt_struct) || - (const char *)p > (dt_struct + fdt_size_dt_struct(fdtp))) + if (((const char *)(uintptr_t)p < dt_struct) || + (const char *)(uintptr_t)p > (dt_struct + fdt_size_dt_struct(fdtp))) return (-1); - offset = (const char *)p - dt_struct; + offset = (const char *)(uintptr_t)p - dt_struct; if (offset < 0) return (-1); @@ -141,7 +143,8 @@ ofw_fdt_peer(ofw_t ofw, phandle_t node) if (node == 0) { /* Find root node */ offset = fdt_path_offset(fdtp, "/"); - p = (phandle_t)fdt_offset_ptr(fdtp, offset, sizeof(p)); + p = (phandle_t)(uintptr_t)fdt_offset_ptr(fdtp, + offset, sizeof(p)); return (p); } @@ -156,7 +159,8 @@ ofw_fdt_peer(ofw_t ofw, phandle_t node) if (depth < 0) return (0); if (depth == 1) { - p = (phandle_t)fdt_offset_ptr(fdtp, offset, sizeof(p)); + p = (phandle_t)(uintptr_t)fdt_offset_ptr(fdtp, + offset, sizeof(p)); return (p); } } @@ -181,7 +185,8 @@ ofw_fdt_child(ofw_t ofw, phandle_t node) if (depth < 0) return (0); if (depth == 1) { - p = (phandle_t)fdt_offset_ptr(fdtp, offset, sizeof(p)); + p = (phandle_t)(uintptr_t)fdt_offset_ptr(fdtp, + offset, sizeof(p)); return (p); } } @@ -201,7 +206,8 @@ ofw_fdt_parent(ofw_t ofw, phandle_t node return (0); paroffset = fdt_parent_offset(fdtp, offset); - p = (phandle_t)fdt_offset_ptr(fdtp, paroffset, sizeof(phandle_t)); + p = (phandle_t)(uintptr_t)fdt_offset_ptr(fdtp, paroffset, + sizeof(phandle_t)); return (p); } @@ -223,7 +229,8 @@ ofw_fdt_instance_to_package(ofw_t ofw, i if (offset < 0) return (0); - p = (phandle_t)fdt_offset_ptr(fdtp, offset, sizeof(phandle_t)); + p = (phandle_t)(uintptr_t)fdt_offset_ptr(fdtp, offset, + sizeof(phandle_t)); return (p); } @@ -326,7 +333,7 @@ ofw_fdt_nextprop(ofw_t ofw, phandle_t pa size_t size) { const struct fdt_property *prop; - int offset, rv; + long offset, rv; offset = fdt_phandle_offset(package); if (offset < 0) @@ -343,7 +350,7 @@ ofw_fdt_nextprop(ofw_t ofw, phandle_t pa if (prop == NULL) return (0); - offset = fdt_phandle_offset((phandle_t)prop); + offset = fdt_phandle_offset((phandle_t)(uintptr_t)prop); rv = fdt_nextprop(offset, buf, size); return (rv); } @@ -379,7 +386,7 @@ ofw_fdt_finddevice(ofw_t ofw, const char offset = fdt_path_offset(fdtp, device); - p = (phandle_t)fdt_offset_ptr(fdtp, offset, sizeof(p)); + p = (phandle_t)(uintptr_t)fdt_offset_ptr(fdtp, offset, sizeof(p)); return (p); } @@ -403,6 +410,7 @@ ofw_fdt_package_to_path(ofw_t ofw, phand static int ofw_fdt_fixup(ofw_t ofw) { +#ifndef __powerpc64__ #define FDT_MODEL_LEN 80 char model[FDT_MODEL_LEN]; phandle_t root; @@ -430,6 +438,7 @@ ofw_fdt_fixup(ofw_t ofw) if (fdt_fixup_table[i].handler != NULL) (*fdt_fixup_table[i].handler)(root); } +#endif return (0); }