From owner-svn-src-projects@FreeBSD.ORG Sat Jun 7 05:12:56 2014 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id D2AE56FA; Sat, 7 Jun 2014 05:12:56 +0000 (UTC) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id A66282B5D; Sat, 7 Jun 2014 05:12:56 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.8/8.14.8) with ESMTP id s575CuwF094690; Sat, 7 Jun 2014 05:12:56 GMT (envelope-from jhibbits@svn.freebsd.org) Received: (from jhibbits@localhost) by svn.freebsd.org (8.14.8/8.14.8/Submit) id s575CugG094685; Sat, 7 Jun 2014 05:12:56 GMT (envelope-from jhibbits@svn.freebsd.org) Message-Id: <201406070512.s575CugG094685@svn.freebsd.org> From: Justin Hibbits Date: Sat, 7 Jun 2014 05:12:56 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r267208 - projects/pmac_pmu/sys/powerpc/powermac X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 07 Jun 2014 05:12:56 -0000 Author: jhibbits Date: Sat Jun 7 05:12:55 2014 New Revision: 267208 URL: http://svnweb.freebsd.org/changeset/base/267208 Log: Add a macio function to reset an ATA channel. This will be used by ata_macio.c for ATA resets. Modified: projects/pmac_pmu/sys/powerpc/powermac/macio.c projects/pmac_pmu/sys/powerpc/powermac/maciovar.h Modified: projects/pmac_pmu/sys/powerpc/powermac/macio.c ============================================================================== --- projects/pmac_pmu/sys/powerpc/powermac/macio.c Sat Jun 7 05:09:41 2014 (r267207) +++ projects/pmac_pmu/sys/powerpc/powermac/macio.c Sat Jun 7 05:12:55 2014 (r267208) @@ -403,6 +403,9 @@ macio_attach(device_t dev) free(dinfo, M_MACIO); continue; } + if (OF_getprop(child, "AAPL,bus-id", + &dinfo->mdi_aapl_busid, sizeof(dinfo->mdi_aapl_busid)) == -1) + dinfo->mdi_aapl_busid = -1; device_set_ivars(cdev, dinfo); /* Set FCRs to enable some devices */ @@ -714,6 +717,50 @@ macio_enable_wireless(device_t dev, bool return (0); } +int macio_reset_ata(device_t atadev) +{ + device_t dev; + struct macio_softc *sc; + struct macio_devinfo *dinfo; + uint32_t resetm,enablem,temp; + + dev = device_get_parent(atadev); + sc = device_get_softc(dev); + + dinfo = device_get_ivars(atadev); + + KASSERT(dinfo->mdi_aapl_busid != -1, + ("macio_reset_ata called on non-mac-io ATA device")); + + switch (dinfo->mdi_aapl_busid) { + case 0: + resetm = FCR1_EIDE0_RESET; + enablem = FCR1_EIDE0_ENABLE; + break; + case 1: + resetm = FCR1_EIDE1_RESET; + enablem = FCR1_EIDE1_ENABLE; + break; + case 2: + resetm = FCR1_UIDE_RESET; + enablem = FCR1_UIDE_ENABLE; + break; + default: + return (1); + } + temp = bus_read_4(sc->sc_memr, KEYLARGO_FCR1); + bus_write_4(sc->sc_memr, KEYLARGO_FCR1, + temp & ~resetm); + temp = bus_read_4(sc->sc_memr, KEYLARGO_FCR1); + bus_write_4(sc->sc_memr, KEYLARGO_FCR1, + temp | enablem); + temp = bus_read_4(sc->sc_memr, KEYLARGO_FCR1); + bus_write_4(sc->sc_memr, KEYLARGO_FCR1, + temp | resetm); + + return (0); +} + static int macio_suspend(device_t dev) { struct macio_softc *sc = device_get_softc(dev); Modified: projects/pmac_pmu/sys/powerpc/powermac/maciovar.h ============================================================================== --- projects/pmac_pmu/sys/powerpc/powermac/maciovar.h Sat Jun 7 05:09:41 2014 (r267207) +++ projects/pmac_pmu/sys/powerpc/powermac/maciovar.h Sat Jun 7 05:12:55 2014 (r267208) @@ -381,10 +381,12 @@ struct macio_devinfo { int mdi_interrupts[6]; int mdi_ninterrupts; int mdi_base; + int mdi_aapl_busid; struct ofw_bus_devinfo mdi_obdinfo; struct resource_list mdi_resources; }; extern int macio_enable_wireless(device_t dev, bool enable); +extern int macio_reset_ata(device_t atadev); #endif /* _MACIO_MACIOVAR_H_ */