From patchwork Fri Jan 20 15:29:38 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?C=C3=A9dric_Le_Goater?= X-Patchwork-Id: 717784 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3v4lyM6xN5z9sDG for ; Sat, 21 Jan 2017 03:09:15 +1100 (AEDT) Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 3v4lyM691lzDqZ4 for ; Sat, 21 Jan 2017 03:09:15 +1100 (AEDT) X-Original-To: skiboot@lists.ozlabs.org Delivered-To: skiboot@lists.ozlabs.org X-Greylist: delayed 1795 seconds by postgrey-1.36 at bilbo; Sat, 21 Jan 2017 03:09:03 AEDT Received: from 19.mo1.mail-out.ovh.net (19.mo1.mail-out.ovh.net [178.32.97.206]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 3v4ly803MDzDqWQ for ; Sat, 21 Jan 2017 03:09:03 +1100 (AEDT) Received: from player758.ha.ovh.net (b7.ovh.net [213.186.33.57]) by mo1.mail-out.ovh.net (Postfix) with ESMTP id F0C983A549 for ; Fri, 20 Jan 2017 16:30:02 +0100 (CET) Received: from zorba.kaod.org.com (LFbn-1-10647-27.w90-89.abo.wanadoo.fr [90.89.233.27]) (Authenticated sender: clg@kaod.org) by player758.ha.ovh.net (Postfix) with ESMTPSA id B6B872C008F; Fri, 20 Jan 2017 16:29:58 +0100 (CET) From: =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= To: skiboot@lists.ozlabs.org Date: Fri, 20 Jan 2017 16:29:38 +0100 Message-Id: <1484926178-13240-4-git-send-email-clg@kaod.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1484926178-13240-1-git-send-email-clg@kaod.org> References: <1484926178-13240-1-git-send-email-clg@kaod.org> MIME-Version: 1.0 X-Ovh-Tracer-Id: 3240902885883087833 X-VR-SPAMSTATE: OK X-VR-SPAMSCORE: -100 X-VR-SPAMCAUSE: gggruggvucftvghtrhhoucdtuddrfeelgedrgeefgdejgecutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfqggfjpdevjffgvefmvefgnecuuegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmd Subject: [Skiboot] [PATCH 3/3] dts: add support for p9 cores X-BeenThere: skiboot@lists.ozlabs.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Mailing list for skiboot development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: skiboot-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "Skiboot" P9 cores have two DTS (the location unit is unknown to me for the moment) which have the same encoding than on the P8. Signed-off-by: Cédric Le Goater --- hw/dts.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/hw/dts.c b/hw/dts.c index 4fd97e75b498..a10df58f7361 100644 --- a/hw/dts.c +++ b/hw/dts.c @@ -184,6 +184,47 @@ static int dts_read_core_temp_p8(uint32_t pir, struct dts *dts) return 0; } +/* Per core Digital Thermal Sensors */ +#define EC_THERM_P9_DTS_RESULT0 0x050000 + +/* Different sensor locations */ +#define P9_CORE_DTS0 0 +#define P9_CORE_DTS1 1 +#define P9_CORE_ZONES 2 + +/* + * Returns the temperature as the max of all zones and a global trip + * attribute. + */ +static int dts_read_core_temp_p9(uint32_t pir, struct dts *dts) +{ + int32_t chip_id = pir_to_chip_id(pir); + int32_t core = pir_to_core_id(pir); + uint64_t dts0; + struct dts temps[P9_CORE_ZONES]; + int rc; + + rc = xscom_read(chip_id, XSCOM_ADDR_P9_EC(core, EC_THERM_P9_DTS_RESULT0), + &dts0); + if (rc) + return rc; + + dts_decode_one_dts(dts0 >> 48, &temps[P9_CORE_DTS0]); + dts_decode_one_dts(dts0 >> 32, &temps[P9_CORE_DTS1]); + + dts_keep_max(temps, P9_CORE_ZONES, dts); + + prlog(PR_TRACE, "DTS: Chip %x Core %x temp:%dC trip:%x\n", + chip_id, core, dts->temp, dts->trip); + + /* + * FIXME: The trip bits are always set ?! Just discard + * them for the moment until we understand why. + */ + dts->trip = 0; + return 0; +} + static int dts_read_core_temp(uint32_t pir, struct dts *dts) { int rc; @@ -195,6 +236,9 @@ static int dts_read_core_temp(uint32_t pir, struct dts *dts) case proc_gen_p8: rc = dts_read_core_temp_p8(pir, dts); break; + case proc_gen_p9: + rc = dts_read_core_temp_p9(pir, dts); + break; default: rc = OPAL_UNSUPPORTED; }