From patchwork Tue Jun 18 07:29:24 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stewart Smith X-Patchwork-Id: 1117660 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.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 45Sft941JYz9s3l for ; Tue, 18 Jun 2019 17:32:17 +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 45Sft92W2vzDqfY for ; Tue, 18 Jun 2019 17:32:17 +1000 (AEST) 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.158.5; helo=mx0a-001b2d01.pphosted.com; envelope-from=stewart@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 (mx0b-001b2d01.pphosted.com [148.163.158.5]) (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 45Sfq66TKGzDqYb for ; Tue, 18 Jun 2019 17:29:38 +1000 (AEST) Received: from pps.filterd (m0098417.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.27/8.16.0.27) with SMTP id x5I7TLqO000772 for ; Tue, 18 Jun 2019 03:29:36 -0400 Received: from ppma01wdc.us.ibm.com (fd.55.37a9.ip4.static.sl-reverse.com [169.55.85.253]) by mx0a-001b2d01.pphosted.com with ESMTP id 2t6thcafgh-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Tue, 18 Jun 2019 03:29:36 -0400 Received: from pps.filterd (ppma01wdc.us.ibm.com [127.0.0.1]) by ppma01wdc.us.ibm.com (8.16.0.27/8.16.0.27) with SMTP id x5I7PAu8011204 for ; Tue, 18 Jun 2019 07:29:37 GMT Received: from b03cxnp07028.gho.boulder.ibm.com (b03cxnp07028.gho.boulder.ibm.com [9.17.130.15]) by ppma01wdc.us.ibm.com with ESMTP id 2t4ra6j86e-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Tue, 18 Jun 2019 07:29:37 +0000 Received: from b03ledav003.gho.boulder.ibm.com (b03ledav003.gho.boulder.ibm.com [9.17.130.234]) by b03cxnp07028.gho.boulder.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id x5I7TXIA20775316 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Tue, 18 Jun 2019 07:29:33 GMT Received: from b03ledav003.gho.boulder.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id CEACD6A058 for ; Tue, 18 Jun 2019 07:29:33 +0000 (GMT) Received: from b03ledav003.gho.boulder.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 6B8326A04F for ; Tue, 18 Jun 2019 07:29:33 +0000 (GMT) Received: from birb.localdomain (unknown [9.185.142.124]) by b03ledav003.gho.boulder.ibm.com (Postfix) with ESMTP for ; Tue, 18 Jun 2019 07:29:33 +0000 (GMT) Received: by birb.localdomain (Postfix, from userid 1000) id 86ED84C4BC9; Tue, 18 Jun 2019 17:29:28 +1000 (AEST) From: Stewart Smith To: skiboot@lists.ozlabs.org Date: Tue, 18 Jun 2019 17:29:24 +1000 Message-Id: <20190618072925.5299-17-stewart@linux.ibm.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190618072925.5299-1-stewart@linux.ibm.com> References: <20190618072925.5299-1-stewart@linux.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:, , definitions=2019-06-18_04:, , signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 suspectscore=1 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-1810050000 definitions=main-1906180062 Subject: [Skiboot] [PATCH 16/17] Move platform specific PRD functionality to struct platform X-BeenThere: skiboot@lists.ozlabs.org X-Mailman-Version: 2.1.29 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" Signed-off-by: Stewart Smith --- hw/prd.c | 36 +++++++++++++++++++++++++----------- include/platform.h | 17 +++++++++++++++++ platforms/ibm-fsp/common.c | 9 +++++++++ platforms/ibm-fsp/firenze.c | 1 + platforms/ibm-fsp/ibm-fsp.h | 1 + platforms/ibm-fsp/zz.c | 1 + 6 files changed, 54 insertions(+), 11 deletions(-) diff --git a/hw/prd.c b/hw/prd.c index fea8cf054c24..904ed2c2c64c 100644 --- a/hw/prd.c +++ b/hw/prd.c @@ -130,7 +130,9 @@ static void prd_msg_consumed(void *data, int status) "PRD: Failed to send FSP -> HBRT message\n"); notify_status = FSP_STATUS_GENERIC_FAILURE; } - hservice_hbrt_msg_response(notify_status); + assert(platform.prd); + assert(platform.prd->msg_response); + platform.prd->msg_response(notify_status); break; case OPAL_PRD_MSG_TYPE_SBE_PASSTHROUGH: proc = msg->sbe_passthrough.chip; @@ -529,9 +531,11 @@ static int prd_msg_handle_firmware_req(struct opal_prd_msg *msg) rc = 0; break; case PRD_FW_MSG_TYPE_ERROR_LOG: - rc = hservice_send_error_log(fw_req->errorlog.plid, - fw_req->errorlog.size, - fw_req->errorlog.data); + assert(platform.prd); + assert(platform.prd->send_error_log); + rc = platform.prd->send_error_log(fw_req->errorlog.plid, + fw_req->errorlog.size, + fw_req->errorlog.data); /* Return generic response to HBRT */ fw_resp->type = cpu_to_be64(PRD_FW_MSG_TYPE_RESP_GENERIC); fw_resp->generic_resp.status = cpu_to_be64(rc); @@ -604,7 +608,9 @@ static int prd_msg_handle_firmware_req(struct opal_prd_msg *msg) unlock(&events_lock); /* Send message to FSP */ - rc = hservice_send_hbrt_msg(&(fw_resp->mbox_msg), data_len); + assert(platform.prd); + assert(platform.prd->send_hbrt_msg); + rc = platform.prd->send_hbrt_msg(&(fw_resp->mbox_msg), data_len); /* * Callback handler from hservice_send_hbrt_msg will take @@ -669,16 +675,24 @@ static int64_t opal_prd_msg(struct opal_prd_msg *msg) rc = prd_msg_handle_firmware_req(msg); break; case OPAL_PRD_MSG_TYPE_FSP_OCC_RESET_STATUS: - rc = fsp_occ_reset_status(msg->fsp_occ_reset_status.chip, - msg->fsp_occ_reset_status.status); + assert(platform.prd); + assert(platform.prd->fsp_occ_reset_status); + rc = platform.prd->fsp_occ_reset_status( + msg->fsp_occ_reset_status.chip, + msg->fsp_occ_reset_status.status); break; case OPAL_PRD_MSG_TYPE_CORE_SPECIAL_WAKEUP: - rc = hservice_wakeup(msg->spl_wakeup.core, - msg->spl_wakeup.mode); + assert(platform.prd); + assert(platform.prd->wakeup); + rc = platform.prd->wakeup(msg->spl_wakeup.core, + msg->spl_wakeup.mode); break; case OPAL_PRD_MSG_TYPE_FSP_OCC_LOAD_START_STATUS: - rc = fsp_occ_load_start_status(msg->fsp_occ_reset_status.chip, - msg->fsp_occ_reset_status.status); + assert(platform.prd); + assert(platform.prd->fsp_occ_load_start_status); + rc = platform.prd->fsp_occ_load_start_status( + msg->fsp_occ_reset_status.chip, + msg->fsp_occ_reset_status.status); break; default: prlog(PR_DEBUG, "PRD: Unsupported prd message type : 0x%x\n", diff --git a/include/platform.h b/include/platform.h index f17847ac0d60..0326e1a247e4 100644 --- a/include/platform.h +++ b/include/platform.h @@ -89,6 +89,18 @@ struct platform_psi { void (*fsp_interrupt)(void); }; +/* + * Some PRD functionality is platform specific. + */ +struct platform_prd { + void (*msg_response)(uint32_t rc); + int (*send_error_log)(uint32_t plid, uint32_t dsize, void *data); + int (*send_hbrt_msg)(void *data, u64 dsize); + int (*wakeup)(uint32_t i_core, uint32_t i_mode); + int (*fsp_occ_load_start_status)(u64 chipid, s64 status); + int (*fsp_occ_reset_status)(u64 chipid, s64 status); +}; + /* * Each platform can provide a set of hooks * that can affect the generic code @@ -108,6 +120,11 @@ struct platform { */ const struct platform_psi *psi; + /* + * Platform specific PRD handling + */ + const struct platform_prd *prd; + /* OpenCAPI platform-specific I2C information */ const struct platform_ocapi *ocapi; diff --git a/platforms/ibm-fsp/common.c b/platforms/ibm-fsp/common.c index ba20d5070353..7f7a1f246206 100644 --- a/platforms/ibm-fsp/common.c +++ b/platforms/ibm-fsp/common.c @@ -275,3 +275,12 @@ struct platform_psi fsp_platform_psi = { .link_established = fsp_reinit_fsp, .fsp_interrupt = fsp_interrupt, }; + +struct platform_prd fsp_platform_prd = { + .msg_response = hservice_hbrt_msg_response, + .send_error_log = hservice_send_error_log, + .send_hbrt_msg = hservice_send_hbrt_msg, + .wakeup = hservice_wakeup, + .fsp_occ_load_start_status = fsp_occ_load_start_status, + .fsp_occ_reset_status = fsp_occ_reset_status, +}; diff --git a/platforms/ibm-fsp/firenze.c b/platforms/ibm-fsp/firenze.c index 6c25023235e7..232833480f75 100644 --- a/platforms/ibm-fsp/firenze.c +++ b/platforms/ibm-fsp/firenze.c @@ -210,6 +210,7 @@ static void firenze_init(void) DECLARE_PLATFORM(firenze) = { .name = "Firenze", .psi = &fsp_platform_psi, + .prd = &fsp_platform_prd, .probe = firenze_probe, .init = firenze_init, .fast_reboot_init = fsp_console_reset, diff --git a/platforms/ibm-fsp/ibm-fsp.h b/platforms/ibm-fsp/ibm-fsp.h index 66139f0c06de..dc3969ec688d 100644 --- a/platforms/ibm-fsp/ibm-fsp.h +++ b/platforms/ibm-fsp/ibm-fsp.h @@ -51,5 +51,6 @@ void vpd_preload(struct dt_node *hub_node); int fsp_heartbeat_time(void); extern struct platform_psi fsp_platform_psi; +extern struct platform_prd fsp_platform_prd; #endif /* __IBM_FSP_COMMON_H */ diff --git a/platforms/ibm-fsp/zz.c b/platforms/ibm-fsp/zz.c index 9e18e406a6f2..ac608f6aba7e 100644 --- a/platforms/ibm-fsp/zz.c +++ b/platforms/ibm-fsp/zz.c @@ -72,6 +72,7 @@ static void zz_init(void) DECLARE_PLATFORM(zz) = { .name = "ZZ", .psi = &fsp_platform_psi, + .prd = &fsp_platform_prd, .probe = zz_probe, .init = zz_init, .fast_reboot_init = fsp_console_reset,