From owner-svn-src-projects@freebsd.org Fri Sep 14 16:25:35 2018 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 51CF2108D6D5 for ; Fri, 14 Sep 2018 16:25:35 +0000 (UTC) (envelope-from luporl@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 078A689138; Fri, 14 Sep 2018 16:25:35 +0000 (UTC) (envelope-from luporl@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id DDB4026D5A; Fri, 14 Sep 2018 16:25:34 +0000 (UTC) (envelope-from luporl@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w8EGPYTT054470; Fri, 14 Sep 2018 16:25:34 GMT (envelope-from luporl@FreeBSD.org) Received: (from luporl@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w8EGPY7N054467; Fri, 14 Sep 2018 16:25:34 GMT (envelope-from luporl@FreeBSD.org) Message-Id: <201809141625.w8EGPY7N054467@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: luporl set sender to luporl@FreeBSD.org using -f From: Leandro Lupori Date: Fri, 14 Sep 2018 16:25:34 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r338686 - projects/power8_bringup_hacks/sys/dev/ahci X-SVN-Group: projects X-SVN-Commit-Author: luporl X-SVN-Commit-Paths: projects/power8_bringup_hacks/sys/dev/ahci X-SVN-Commit-Revision: 338686 X-SVN-Commit-Repository: base 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.27 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: Fri, 14 Sep 2018 16:25:35 -0000 Author: luporl Date: Fri Sep 14 16:25:34 2018 New Revision: 338686 URL: https://svnweb.freebsd.org/changeset/base/338686 Log: Added some hacks to AHCI to get it working Marvell 88SE9235 SATA controller now works on POWER8. There is an issue with DMA addresses over 0x7FFFFFFF. The root cause is until unknwon. For now, AHCI DMA is being limited, to used only addresses below the above threshold. Modified: projects/power8_bringup_hacks/sys/dev/ahci/ahci.c projects/power8_bringup_hacks/sys/dev/ahci/ahci.h projects/power8_bringup_hacks/sys/dev/ahci/ahci_pci.c Modified: projects/power8_bringup_hacks/sys/dev/ahci/ahci.c ============================================================================== --- projects/power8_bringup_hacks/sys/dev/ahci/ahci.c Fri Sep 14 15:46:31 2018 (r338685) +++ projects/power8_bringup_hacks/sys/dev/ahci/ahci.c Fri Sep 14 16:25:34 2018 (r338686) @@ -100,6 +100,21 @@ static MALLOC_DEFINE(M_AHCI, "AHCI driver", "AHCI driv #define RECOVERY_REQUEST_SENSE 2 #define recovery_slot spriv_field1 +#ifdef __powerpc64__ +#define AHCI_BUS_SPACE_MAXADDR_31BIT 0x7FFFFFFFU + +#define AHCI_BUS_SPACE_MAXADDR(quirks) \ + (quirks & AHCI_Q_DMA31 ? AHCI_BUS_SPACE_MAXADDR_31BIT : \ + BUS_SPACE_MAXADDR) + +#define AHCI_BUS_SPACE_MAXADDR_32BIT(quirks) \ + (quirks & AHCI_Q_DMA31 ? AHCI_BUS_SPACE_MAXADDR_31BIT : \ + BUS_SPACE_MAXADDR_32BIT) +#else +#define AHCI_BUS_SPACE_MAXADDR(quirks) BUS_SPACE_MAXADDR +#define AHCI_BUS_SPACE_MAXADDR_32BIT(quirks) BUS_SPACE_MAXADDR_32BIT +#endif + int ahci_ctlr_setup(device_t dev) { @@ -248,8 +263,10 @@ ahci_attach(device_t dev) /* Create controller-wide DMA tag. */ if (bus_dma_tag_create(bus_get_dma_tag(dev), 1, 0, - (ctlr->caps & AHCI_CAP_64BIT) ? BUS_SPACE_MAXADDR : - BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL, + (ctlr->caps & AHCI_CAP_64BIT) ? + AHCI_BUS_SPACE_MAXADDR(ctlr->quirks) : + AHCI_BUS_SPACE_MAXADDR_32BIT(ctlr->quirks), + AHCI_BUS_SPACE_MAXADDR(ctlr->quirks), NULL, NULL, BUS_SPACE_MAXSIZE, BUS_SPACE_UNRESTRICTED, BUS_SPACE_MAXSIZE, ctlr->dma_coherent ? BUS_DMA_COHERENT : 0, NULL, NULL, &ctlr->dma_tag)) { @@ -943,7 +960,8 @@ ahci_dmainit(device_t dev) /* Command area. */ if (bus_dma_tag_create(bus_get_dma_tag(dev), 1024, 0, - BUS_SPACE_MAXADDR, BUS_SPACE_MAXADDR, + AHCI_BUS_SPACE_MAXADDR(ch->quirks), + AHCI_BUS_SPACE_MAXADDR(ch->quirks), NULL, NULL, AHCI_WORK_SIZE, 1, AHCI_WORK_SIZE, 0, NULL, NULL, &ch->dma.work_tag)) goto error; @@ -962,7 +980,8 @@ ahci_dmainit(device_t dev) else rfsize = 256; if (bus_dma_tag_create(bus_get_dma_tag(dev), rfsize, 0, - BUS_SPACE_MAXADDR, BUS_SPACE_MAXADDR, + AHCI_BUS_SPACE_MAXADDR(ch->quirks), + AHCI_BUS_SPACE_MAXADDR(ch->quirks), NULL, NULL, rfsize, 1, rfsize, 0, NULL, NULL, &ch->dma.rfis_tag)) goto error; @@ -977,7 +996,8 @@ ahci_dmainit(device_t dev) ch->dma.rfis_bus = dcba.maddr; /* Data area. */ if (bus_dma_tag_create(bus_get_dma_tag(dev), 2, 0, - BUS_SPACE_MAXADDR, BUS_SPACE_MAXADDR, + AHCI_BUS_SPACE_MAXADDR(ch->quirks), + AHCI_BUS_SPACE_MAXADDR(ch->quirks), NULL, NULL, AHCI_SG_ENTRIES * PAGE_SIZE * ch->numslots, AHCI_SG_ENTRIES, AHCI_PRD_MAX, Modified: projects/power8_bringup_hacks/sys/dev/ahci/ahci.h ============================================================================== --- projects/power8_bringup_hacks/sys/dev/ahci/ahci.h Fri Sep 14 15:46:31 2018 (r338685) +++ projects/power8_bringup_hacks/sys/dev/ahci/ahci.h Fri Sep 14 16:25:34 2018 (r338686) @@ -604,6 +604,7 @@ enum ahci_err_type { #define AHCI_Q_MRVL_SR_DEL 0x00200000 #define AHCI_Q_NOCCS 0x00400000 #define AHCI_Q_NOAUX 0x00800000 +#define AHCI_Q_DMA31 0x01000000 #define AHCI_Q_BIT_STRING \ "\020" \ @@ -630,7 +631,8 @@ enum ahci_err_type { "\025NOMSIX" \ "\026MRVL_SR_DEL" \ "\027NOCCS" \ - "\030NOAUX" + "\030NOAUX" \ + "\031DMA31" int ahci_attach(device_t dev); int ahci_detach(device_t dev); Modified: projects/power8_bringup_hacks/sys/dev/ahci/ahci_pci.c ============================================================================== --- projects/power8_bringup_hacks/sys/dev/ahci/ahci_pci.c Fri Sep 14 15:46:31 2018 (r338685) +++ projects/power8_bringup_hacks/sys/dev/ahci/ahci_pci.c Fri Sep 14 16:25:34 2018 (r338686) @@ -261,7 +261,7 @@ static const struct { {0x92151b4b, 0x00, "Marvell 88SE9215", 0}, {0x92201b4b, 0x00, "Marvell 88SE9220", AHCI_Q_ALTSIG}, {0x92301b4b, 0x00, "Marvell 88SE9230", AHCI_Q_ALTSIG}, - {0x92351b4b, 0x00, "Marvell 88SE9235", 0}, + {0x92351b4b, 0x00, "Marvell 88SE9235", AHCI_Q_DMA31}, {0x06201103, 0x00, "HighPoint RocketRAID 620", 0}, {0x06201b4b, 0x00, "HighPoint RocketRAID 620", 0}, {0x06221103, 0x00, "HighPoint RocketRAID 622", 0},