From owner-p4-projects@FreeBSD.ORG Wed May 9 15:36:05 2007 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id D0BF216A404; Wed, 9 May 2007 15:36:04 +0000 (UTC) X-Original-To: perforce@freebsd.org Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 6BFD916A402 for ; Wed, 9 May 2007 15:36:04 +0000 (UTC) (envelope-from bms@incunabulum.net) Received: from repoman.freebsd.org (repoman.freebsd.org [69.147.83.41]) by mx1.freebsd.org (Postfix) with ESMTP id 5B02713C48A for ; Wed, 9 May 2007 15:36:04 +0000 (UTC) (envelope-from bms@incunabulum.net) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.8/8.13.8) with ESMTP id l49Fa4lK091944 for ; Wed, 9 May 2007 15:36:04 GMT (envelope-from bms@incunabulum.net) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.8/8.13.8/Submit) id l49Fa3xY091941 for perforce@freebsd.org; Wed, 9 May 2007 15:36:03 GMT (envelope-from bms@incunabulum.net) Date: Wed, 9 May 2007 15:36:03 GMT Message-Id: <200705091536.l49Fa3xY091941@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to bms@incunabulum.net using -f From: Bruce M Simpson To: Perforce Change Reviews Cc: Subject: PERFORCE change 119561 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 09 May 2007 15:36:05 -0000 http://perforce.freebsd.org/chv.cgi?CH=119561 Change 119561 by bms@bms_anglepoise on 2007/05/09 15:35:21 Add instance variables and devinfo for child devices. Add a skeleton siba child driver for the ChipCommon core which doesn't do anything yet. Be sure to free the window for the entire SiBa system bus range in MIPS memory space before we attach children, as their allocations will ultimately be proxied to nexus (when Siba is used as a system bus). Affected files ... .. //depot/projects/mips2/src/sys/mips/mips32/sentry5/files.sentry5#5 edit .. //depot/projects/mips2/src/sys/mips/mips32/sentry5/siba.c#3 edit .. //depot/projects/mips2/src/sys/mips/mips32/sentry5/siba_cc.c#1 add .. //depot/projects/mips2/src/sys/mips/mips32/sentry5/sibavar.h#2 edit Differences ... ==== //depot/projects/mips2/src/sys/mips/mips32/sentry5/files.sentry5#5 (text+ko) ==== @@ -2,3 +2,4 @@ #mips/mips32/sentry5/s5_machdep.c standard mips/mips32/sentry5/siba.c optional siba +mips/mips32/sentry5/siba_cc.c optional siba ==== //depot/projects/mips2/src/sys/mips/mips32/sentry5/siba.c#3 (text+ko) ==== @@ -100,8 +100,10 @@ static uint8_t siba_getncores(uint16_t); static int siba_print_child(device_t, device_t); static int siba_probe(device_t); +int siba_read_ivar(device_t, device_t, int, uintptr_t *); static struct siba_devinfo * siba_setup_devinfo(device_t, uint8_t); +int siba_write_ivar(device_t, device_t, int, uintptr_t); /* * Earlier ChipCommon revisions have hardcoded number of cores @@ -229,6 +231,11 @@ uint32_t total; total = sc->sc_ncores * SIBA_CORE_LEN; + /* XXX Don't allocate the entire window until we + * enumerate the bus. Once the bus has been enumerated, + * and instance variables/children instantiated + populated, + * release the resource so children may attach. + */ sc->sc_mem = bus_alloc_resource(dev, SYS_RES_MEMORY, &rid, sc->sc_maddr, sc->sc_maddr + total - 1, total, RF_ACTIVE); if (sc->sc_mem == NULL) { @@ -314,15 +321,28 @@ } else { device_printf(dev, "child is %p\n", child); device_set_ivars(child, sdi); - #ifdef notyet + + /* Set memory window for immediate child. */ bus_addr_t baseaddr; baseaddr = sc->sc_maddr + (idx * SIBA_CORE_LEN); bus_set_resource(child, SYS_RES_MEMORY, MIPS_MEM_RID, baseaddr, baseaddr + SIBA_CORE_LEN - 1); - #endif } } + /* + * Release our memory window before children are attached. + */ + int result; + int rid; + rid = MIPS_MEM_RID; + result = bus_release_resource(dev, SYS_RES_MEMORY, rid, + sc->sc_mem); + if (result != 0) { + device_printf(dev, "error %d releasing resource\n", result); + return (ENXIO); + } + return (bus_generic_attach(dev)); } @@ -423,6 +443,37 @@ #endif } +int +siba_read_ivar(device_t dev, device_t child, int which, uintptr_t *result) +{ + struct siba_devinfo *sdi; + + sdi = device_get_ivars(child); + + switch (which) { + case SIBA_IVAR_VENDOR: + *result = sdi->sdi_vid; + break; + case SIBA_IVAR_DEVICE: + *result = sdi->sdi_devid; + break; + case SIBA_IVAR_REVID: + *result = sdi->sdi_rev; + break; + default: + return (ENOENT); + } + + return (0); +} + +int +siba_write_ivar(device_t dev, device_t child, int which, uintptr_t value) +{ + + return (EINVAL); +} + static device_method_t siba_methods[] = { /* Device interface */ DEVMETHOD(device_attach, siba_attach), @@ -437,8 +488,10 @@ DEVMETHOD(bus_add_child, siba_add_child), DEVMETHOD(bus_alloc_resource, siba_alloc_resource), DEVMETHOD(bus_print_child, siba_print_child), + DEVMETHOD(bus_read_ivar, siba_read_ivar), DEVMETHOD(bus_setup_intr, bus_generic_setup_intr), DEVMETHOD(bus_teardown_intr, bus_generic_teardown_intr), + DEVMETHOD(bus_write_ivar, siba_write_ivar), {0, 0}, }; ==== //depot/projects/mips2/src/sys/mips/mips32/sentry5/sibavar.h#2 (text+ko) ==== @@ -41,11 +41,6 @@ uint8_t sc_ncores; }; -enum siba_device_ivars { - SIBA_IVAR_VENDOR, - SIBA_IVAR_DEVICE, - SIBA_IVAR_REVID -}; struct siba_devinfo { struct resource_list sdi_rl; @@ -76,4 +71,19 @@ bus_space_write_4((sc)->sc_bt, (sc)->sc_bh, \ (core * SIBA_CORE_LEN) + (reg), (val)) +enum siba_device_ivars { + SIBA_IVAR_VENDOR, + SIBA_IVAR_DEVICE, + SIBA_IVAR_REVID +}; + +#define SIBA_ACCESSOR(var, ivar, type) \ + __BUS_ACCESSOR(siba, var, SIBA, ivar, type) + +SIBA_ACCESSOR(vendor, VENDOR, uint16_t) +SIBA_ACCESSOR(device, DEVICE, uint16_t) +SIBA_ACCESSOR(revid, REVID, uint8_t) + +#undef SIBA_ACCESSOR + #endif /* _SIBAVAR_H_ */