From patchwork Sun Sep 9 11:41:38 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vaibhav Jain X-Patchwork-Id: 967743 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [203.11.71.2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 427Tn53zptz9s2P for ; Sun, 9 Sep 2018 21:42:33 +1000 (AEST) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=linux.ibm.com Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 427Tn52czJzF3LP for ; Sun, 9 Sep 2018 21:42:33 +1000 (AEST) Authentication-Results: lists.ozlabs.org; dmarc=none (p=none dis=none) header.from=linux.ibm.com X-Original-To: skiboot@lists.ozlabs.org Delivered-To: skiboot@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=linux.ibm.com (client-ip=148.163.156.1; helo=mx0a-001b2d01.pphosted.com; envelope-from=vaibhav@linux.ibm.com; receiver=) Authentication-Results: lists.ozlabs.org; dmarc=none (p=none dis=none) header.from=linux.ibm.com Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) (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 427Tmk4kZHzF3CK for ; Sun, 9 Sep 2018 21:42:14 +1000 (AEST) Received: from pps.filterd (m0098396.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.22/8.16.0.22) with SMTP id w89BdVBQ061239 for ; Sun, 9 Sep 2018 07:42:12 -0400 Received: from e06smtp04.uk.ibm.com (e06smtp04.uk.ibm.com [195.75.94.100]) by mx0a-001b2d01.pphosted.com with ESMTP id 2mcuet3d52-1 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=NOT) for ; Sun, 09 Sep 2018 07:42:12 -0400 Received: from localhost by e06smtp04.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Sun, 9 Sep 2018 12:42:10 +0100 Received: from b06cxnps4075.portsmouth.uk.ibm.com (9.149.109.197) by e06smtp04.uk.ibm.com (192.168.101.134) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; (version=TLSv1/SSLv3 cipher=AES256-GCM-SHA384 bits=256/256) Sun, 9 Sep 2018 12:42:07 +0100 Received: from d06av21.portsmouth.uk.ibm.com (d06av21.portsmouth.uk.ibm.com [9.149.105.232]) by b06cxnps4075.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id w89Bg6IG61079692 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Sun, 9 Sep 2018 11:42:06 GMT Received: from d06av21.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 8A5735204F; Sun, 9 Sep 2018 14:41:56 +0100 (BST) Received: from vajain21.in.ibm.com.com (unknown [9.199.52.245]) by d06av21.portsmouth.uk.ibm.com (Postfix) with ESMTP id EDCC95204E; Sun, 9 Sep 2018 14:41:54 +0100 (BST) From: Vaibhav Jain To: Frederic Barrat , Andrew Donnellan , Christophe Lombard Date: Sun, 9 Sep 2018 17:11:38 +0530 X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180909114140.9836-1-vaibhav@linux.ibm.com> References: <20180909114140.9836-1-vaibhav@linux.ibm.com> X-TM-AS-GCONF: 00 x-cbid: 18090911-0016-0000-0000-00000202B281 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 18090911-0017-0000-0000-000032596A7D Message-Id: <20180909114140.9836-2-vaibhav@linux.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:, , definitions=2018-09-09_08:, , signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 suspectscore=0 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 mlxscore=0 impostorscore=0 mlxlogscore=999 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1807170000 definitions=main-1809090130 Subject: [Skiboot] [RFC 1/3] capp: Add ability to fetch CAPP attribute override values from nvram X-BeenThere: skiboot@lists.ozlabs.org X-Mailman-Version: 2.1.27 Precedence: list List-Id: Mailing list for skiboot development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: skiboot@lists.ozlabs.org MIME-Version: 1.0 Errors-To: skiboot-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "Skiboot" This patch implements capp_get_override() that queries the nvram 'ibm,skiboot' partition for an attribute override 'attr' present and return its value as an uint64_t. In case the the attribute-override isn't present in nvram then the 'def_val' argument to the function is returned. The expected key-format for attribute override in nvram is: chip.capp<0|1>. chip-id : Chip-index of the CAPP. capp<0|1> : CAPP index on the chip. There are max 2 CAPPs in a chip. attr : Attribute name as string. For example to allocate 2 STQ engines to CAPP-1 on Chip-0 the nvram config should be 'chip00.capp1.stq-engines=2' . During CAPP initialization capp_get_override() will be called to fetch override values for various CAPP initialization attributes and the value returned from the function will be used. The function itself wont parses nor understands the attr being requested and just checks if an attribute override for the given CAPP exists and returns its value. Signed-off-by: Vaibhav Jain --- hw/capp.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ include/capp.h | 2 ++ 2 files changed, 52 insertions(+) diff --git a/hw/capp.c b/hw/capp.c index eeaa4ac4..177a6f15 100644 --- a/hw/capp.c +++ b/hw/capp.c @@ -19,6 +19,11 @@ #include #include #include +#include +#include +#include +#include +#include #define PHBERR(opal_id, chip_id, index, fmt, a...) \ prlog(PR_ERR, "PHB#%04x[%d:%d]: " fmt, \ @@ -240,3 +245,48 @@ int64_t capp_get_info(int chip_id, struct phb *phb, struct capp_info *info) return OPAL_PARAMETER; } + +uint64_t capp_get_override(struct phb *phb, const char *attr, uint64_t def_val) +{ + char key_buffer[33]; + const char *val; + uint64_t nval; + unsigned int chip_index, capp_index; + + switch (phb->phb_type) { + case phb_type_pcie_v4: + { + struct phb4 *p = phb_to_phb4(phb); + + chip_index = p->chip_id; + capp_index = PHB4_CAPP_REG_OFFSET(p) ? 1 : 0; + } + break; + case phb_type_pcie_v3: + { + struct phb3 *p = phb_to_phb3(phb); + + chip_index = p->chip_id; + capp_index = PHB3_CAPP_REG_OFFSET(p) ? 1 : 0; + } + break; + default: + return def_val; + } + + /* Construct the key based on chip and capp index */ + snprintf(key_buffer, sizeof(key_buffer) - 1, "chip%02x.capp%01x.%s", + chip_index, capp_index, attr); + key_buffer[sizeof(key_buffer) - 1] = 0; + + /* Query the nvram for any override */ + val = nvram_query(key_buffer); + if (val) { + nval = strtoul(val, NULL, 0); + prlog(PR_DEBUG, "CAPP Override: %s: 0x%016llX => 0x%016llX\n", + key_buffer, def_val, nval); + return nval; + } else { + return def_val; + } +} diff --git a/include/capp.h b/include/capp.h index 597401d5..14122b17 100644 --- a/include/capp.h +++ b/include/capp.h @@ -96,4 +96,6 @@ extern int64_t capp_load_ucode(unsigned int chip_id, uint32_t opal_id, extern int64_t capp_get_info(int chip_id, struct phb *phb, struct capp_info *info); +uint64_t capp_get_override(struct phb *phb, const char *attr, uint64_t def_val); + #endif /* __CAPP_H */