From owner-svn-src-head@freebsd.org Tue Jul 21 16:02:45 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D92149A74D7 for ; Tue, 21 Jul 2015 16:02:45 +0000 (UTC) (envelope-from zbb@semihalf.com) Received: from mail-wi0-f177.google.com (mail-wi0-f177.google.com [209.85.212.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 74B811199 for ; Tue, 21 Jul 2015 16:02:45 +0000 (UTC) (envelope-from zbb@semihalf.com) Received: by wibxm9 with SMTP id xm9so125233081wib.0 for ; Tue, 21 Jul 2015 09:02:37 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc:content-type; bh=dZUaUU23kdVTYYOj6PGEqW6uokvG/L0H50J9NPSB/Vc=; b=N2RyWvZjY7/pcyWP0+uiGzMITpx1kdgcmt1zbSgVBioHXknyPZzz9m5WIo3R5d+QOd ciQpHmj5wWU4gGVM06Ydr1szGQo+UBg1DgsgG4E/UZt8DeZR/kmS/UciiccPeDs+Uwzb +QI0LibpOCLogl0Ay2DCxBIsaArLkvsA3EECSezljZfSJlcdgOwy2SHq+uLO2KI+7UZY D8S8wvpKrsYjFe9PrTt+vZu9l5AF4U8OiRAiOLiNd/H/13qhKsQ5501mFQta8V78yKO4 UEigsfRU/VsQLtnIQoIj6/enpWenkcYFaewy1UNxoQYyPSyFg7kYD6R6IqTTsW85b46b EKNw== X-Gm-Message-State: ALoCoQlFHDZo2dLCHQWqtMaIke/vT/BnjsBD7/No5q1hdM+gJ20phZMoZApvRNpurHkhFgz14WDz X-Received: by 10.180.84.202 with SMTP id b10mr33417332wiz.23.1437494557798; Tue, 21 Jul 2015 09:02:37 -0700 (PDT) MIME-Version: 1.0 Received: by 10.180.75.12 with HTTP; Tue, 21 Jul 2015 09:02:18 -0700 (PDT) In-Reply-To: <20150721160145.65c9798b@bender> References: <201507211447.t6LElO3r098030@repo.freebsd.org> <20150721160145.65c9798b@bender> From: Zbigniew Bodek Date: Tue, 21 Jul 2015 18:02:18 +0200 Message-ID: Subject: Re: svn commit: r285752 - in head/sys: arm64/arm64 dev/pci To: Andrew Turner Cc: Zbigniew Bodek , svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Content-Type: text/plain; charset=UTF-8 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Jul 2015 16:02:46 -0000 Hello Andrew, Please check in-line. Best regards zbb 2015-07-21 17:01 GMT+02:00 Andrew Turner : > On Tue, 21 Jul 2015 14:47:24 +0000 (UTC) > Zbigniew Bodek wrote: > >> Author: zbb >> Date: Tue Jul 21 14:47:23 2015 >> New Revision: 285752 >> URL: https://svnweb.freebsd.org/changeset/base/285752 >> >> Log: >> Add support for vendor specific function for PCI devid acquisition >> in ITS >> It is possible that some HW will use different PCI devids, >> hence allow to replace the default domain:bus:slot:func schema >> by implementing and registering custom function. >> >> Obtained from: Semihalf >> Sponsored by: The FreeBSD Foundation >> Differential Revision: https://reviews.freebsd.org/D3118 >> >> Modified: >> head/sys/arm64/arm64/gic_v3_its.c >> head/sys/arm64/arm64/gic_v3_var.h >> head/sys/dev/pci/pcireg.h >> >> Modified: head/sys/arm64/arm64/gic_v3_its.c >> ============================================================================== >> --- head/sys/arm64/arm64/gic_v3_its.c Tue Jul 21 14:39:34 >> 2015 (r285751) +++ head/sys/arm64/arm64/gic_v3_its.c >> Tue Jul 21 14:47:23 2015 (r285752) @@ -44,6 +44,7 @@ >> __FBSDID("$FreeBSD$"); #include >> #include >> >> +#include >> #include >> >> #include >> @@ -89,6 +90,7 @@ static void its_free_tables(struct gic_v >> static void its_init_commandq(struct gic_v3_its_softc *); >> static int its_init_cpu(struct gic_v3_its_softc *); >> static void its_init_cpu_collection(struct gic_v3_its_softc *); >> +static uint32_t its_get_devid(device_t); >> >> static int its_cmd_send(struct gic_v3_its_softc *, struct >> its_cmd_desc *); >> @@ -133,6 +135,23 @@ const char *its_ptab_type[] = { >> [GITS_BASER_TYPE_RES7] = "Reserved (7)", >> }; >> >> +/* >> + * Vendor specific quirks. >> + * One needs to add appropriate entry to its_quirks[] >> + * table if the imlementation varies from the generic ARM ITS. >> + */ >> + >> +/* Cavium ThunderX PCI devid acquire function */ >> +static uint32_t its_get_devid_thunder(device_t); >> + >> +static const struct its_quirks its_quirks[] = { >> + { >> + .cpuid = CPU_ID_RAW(CPU_IMPL_CAVIUM, >> CPU_PART_THUNDER, 0, 0), >> + .cpuid_mask = CPU_IMPL_MASK | CPU_PART_MASK, >> + .devid_func = its_get_devid_thunder, >> + }, >> +}; >> + >> static struct gic_v3_its_softc *its_sc; >> >> #define gic_its_read(sc, len, reg) \ >> @@ -1300,7 +1319,7 @@ its_device_alloc_locked(struct gic_v3_it >> if (newdev != NULL) >> return (newdev); >> >> - devid = PCI_DEVID(pci_dev); >> + devid = its_get_devid(pci_dev); >> >> /* There was no previously created device. Create one now */ >> newdev = malloc(sizeof(*newdev), M_GIC_V3_ITS, (M_WAITOK | >> M_ZERO)); @@ -1353,6 +1372,73 @@ its_device_asign_lpi_locked(struct >> gic_v its_dev->lpis.lpi_free); >> its_dev->lpis.lpi_free--; >> } >> + >> +/* >> + * ITS quirks. >> + * Add vendor specific PCI devid function here. >> + */ >> +static uint32_t >> +its_get_devid_thunder(device_t pci_dev) >> +{ >> + int bsf; >> + int pem; >> + uint32_t bus; >> + >> + bus = pci_get_bus(pci_dev); >> + >> + bsf = PCI_RID(pci_get_bus(pci_dev), pci_get_slot(pci_dev), >> + pci_get_function(pci_dev)); >> + >> + /* ECAM is on bus=0 */ >> + if (bus == 0) { >> + return ((pci_get_domain(pci_dev) << >> PCI_RID_DOMAIN_SHIFT) | >> + bsf); >> + /* PEM otherwise */ >> + } else { >> + /* PEM number is equal to domain */ >> + pem = pci_get_domain(pci_dev); > > But what is a PEM number? PEM == PCI-E MAC. This is the number of root complex. > >> + >> + /* Hardcode appropriate PEM numbers */ >> + if (pem < 3 ) >> + return ((0x1 << PCI_RID_DOMAIN_SHIFT) | bsf); >> + >> + if (pem < 6 ) >> + return ((0x3 << PCI_RID_DOMAIN_SHIFT) | bsf); >> + >> + if (pem < 9 ) >> + return ((0x9 << PCI_RID_DOMAIN_SHIFT) | bsf); >> + >> + if (pem < 12 ) >> + return ((0xB << PCI_RID_DOMAIN_SHIFT) | bsf); > > What do these magic numbers mean? This is a domain portion of PCI device ID passed by the HW along with the transaction to memory. In that case the methodology differs from the genuine (default in this driver) ARM implementation and it is Thunder-specific. > >> + } >> + >> + return (0); >> +} >> + > > Andrew > _______________________________________________ > svn-src-all@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/svn-src-all > To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"