From owner-svn-src-all@freebsd.org Tue Jul 21 16:02:40 2015 Return-Path: Delivered-To: svn-src-all@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 0D1CD9A74D4 for ; Tue, 21 Jul 2015 16:02:40 +0000 (UTC) (envelope-from zbb@semihalf.com) Received: from mail-wg0-f45.google.com (mail-wg0-f45.google.com [74.125.82.45]) (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 B9C191192 for ; Tue, 21 Jul 2015 16:02:39 +0000 (UTC) (envelope-from zbb@semihalf.com) Received: by wgav7 with SMTP id v7so95126947wga.2 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=i2xLaHvlR0lRODzdZg1UJaqZyczp20RTw3/1XD2MT/4DjMTHLajistwG803rnjRj3/ //UcMWiGtNaSujs3bVzSiRsMGhnqPbl0Iq2EEg2aP7/aQOYPjRUYoI5GqSPIZHRn6vvV s1Cd6iWhSsRQyucJ3+VzYM72pWEWBIJ04rag8Pu4a3kpW9q5IQ73AFFuxfl9gfoYYE8V XHvu4agS+kBRqxbD5JS/wZ/PY/5X6u8/wEIGO2tvL12lSsNenZBNp9zqghHDSx4JE53R fPUhFdZwJ+6nwMgvBWNusjAcwqTe3Wjqo1v0s396oCzqUo6uzmHAcK3Ty0zIUpNEIjG5 YoGA== X-Gm-Message-State: ALoCoQl3X3ZoHDJh29yUbdPQIMSMX098aGZOhYUyDWOBs55t+pyg8GnvfYaqhfX6lZoQpXsJLMbn 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-all@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Jul 2015 16:02:40 -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"