From patchwork Fri Jun 25 06:19:26 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vasant Hegde X-Patchwork-Id: 1496932 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.ozlabs.org (client-ip=112.213.38.117; helo=lists.ozlabs.org; envelope-from=skiboot-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=ibm.com header.i=@ibm.com header.a=rsa-sha256 header.s=pp1 header.b=M5dqcTcn; dkim-atps=neutral Received: from lists.ozlabs.org (lists.ozlabs.org [112.213.38.117]) (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 4GB6Mb0Xh8z9sRf for ; Fri, 25 Jun 2021 16:21:15 +1000 (AEST) Received: from boromir.ozlabs.org (localhost [IPv6:::1]) by lists.ozlabs.org (Postfix) with ESMTP id 4GB6Mb5lGPz3bx3 for ; Fri, 25 Jun 2021 16:21:15 +1000 (AEST) Authentication-Results: lists.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=ibm.com header.i=@ibm.com header.a=rsa-sha256 header.s=pp1 header.b=M5dqcTcn; dkim-atps=neutral X-Original-To: skiboot@lists.ozlabs.org Delivered-To: skiboot@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; spf=none (no SPF record) smtp.mailfrom=linux.vnet.ibm.com (client-ip=148.163.158.5; helo=mx0a-001b2d01.pphosted.com; envelope-from=hegdevasant@linux.vnet.ibm.com; receiver=) Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=ibm.com header.i=@ibm.com header.a=rsa-sha256 header.s=pp1 header.b=M5dqcTcn; dkim-atps=neutral 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 4GB6Lq3jCkz30B3 for ; Fri, 25 Jun 2021 16:20:35 +1000 (AEST) Received: from pps.filterd (m0098419.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id 15P6IEca064880 for ; Fri, 25 Jun 2021 02:20:32 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding; s=pp1; bh=PR1ek8B+pGF9QSeKDw3oPh3Sbl3j5f58c8fw5cVuU50=; b=M5dqcTcnuMtJHRhnyS0+uMdhAPb8ksj6fSfADWbU6DvrStBHhe9GI7HfR1hYPOrgIA3Y gauOoc5TGhbhNyh7WT+lPAIm3ZNJSD7dwbaDRHyH84Od+vjBPZLfvy/FrQ3g3FP5sOUT IMKGJgp29Y8zK3T+jsKXqwTwxJvXYr2sk+bujt9rPLXn33XpKZVdZIceHrisgeH53RY2 Dj/JLNHnOuxSi8jhukK5TpSif9CY4ECEuBaNqUP2PEAAE4jJncI+SYUjl2zjr48yOHEs kvmrj+9eOEmqw9gjVVNGANEfUp2vSFOqo+TFn36ljCEtuER7UY3mjyP7F5eVx5CFd+CJ tw== Received: from pps.reinject (localhost [127.0.0.1]) by mx0b-001b2d01.pphosted.com with ESMTP id 39d9rr8136-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Fri, 25 Jun 2021 02:20:32 -0400 Received: from m0098419.ppops.net (m0098419.ppops.net [127.0.0.1]) by pps.reinject (8.16.0.43/8.16.0.43) with SMTP id 15P6JJ23067356 for ; Fri, 25 Jun 2021 02:20:31 -0400 Received: from ppma06fra.de.ibm.com (48.49.7a9f.ip4.static.sl-reverse.com [159.122.73.72]) by mx0b-001b2d01.pphosted.com with ESMTP id 39d9rr812v-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 25 Jun 2021 02:20:31 -0400 Received: from pps.filterd (ppma06fra.de.ibm.com [127.0.0.1]) by ppma06fra.de.ibm.com (8.16.1.2/8.16.1.2) with SMTP id 15P68Lhx029730; Fri, 25 Jun 2021 06:20:30 GMT Received: from b06cxnps3074.portsmouth.uk.ibm.com (d06relay09.portsmouth.uk.ibm.com [9.149.109.194]) by ppma06fra.de.ibm.com with ESMTP id 3997uhhkku-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 25 Jun 2021 06:20:29 +0000 Received: from d06av24.portsmouth.uk.ibm.com (mk.ibm.com [9.149.105.60]) by b06cxnps3074.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 15P6KRxE26870136 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 25 Jun 2021 06:20:27 GMT Received: from d06av24.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 5465F4203F; Fri, 25 Jun 2021 06:20:27 +0000 (GMT) Received: from d06av24.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 252D54204C; Fri, 25 Jun 2021 06:20:26 +0000 (GMT) Received: from hegdevasant.in.ibm.com (unknown [9.199.46.25]) by d06av24.portsmouth.uk.ibm.com (Postfix) with ESMTP; Fri, 25 Jun 2021 06:20:25 +0000 (GMT) From: Vasant Hegde To: skiboot@lists.ozlabs.org Date: Fri, 25 Jun 2021 11:49:26 +0530 Message-Id: <20210625061937.47314-12-hegdevasant@linux.vnet.ibm.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210625061937.47314-1-hegdevasant@linux.vnet.ibm.com> References: <20210625061937.47314-1-hegdevasant@linux.vnet.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Proofpoint-GUID: eAVJvOEgVH6O0203PQuPR7iwTFYAT0Wh X-Proofpoint-ORIG-GUID: NYOG9B9TLXxQPvXgAyW2r696SrjqDzsE X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.391, 18.0.790 definitions=2021-06-25_02:2021-06-24, 2021-06-25 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 lowpriorityscore=0 malwarescore=0 adultscore=0 priorityscore=1501 phishscore=0 mlxscore=0 clxscore=1015 mlxlogscore=999 suspectscore=0 impostorscore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2104190000 definitions=main-2106250034 Subject: [Skiboot] [PATCH 11/22] hw/p8-i2c: Set poll interval from the current port 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" From: Oliver O'Halloran The rate at which we need to poll the master depends on the speed of the bus. Faster I2C buses will require more frequent polling so it doesn't make a whole lot of sense to set this on a per-master basis. This patch sets the master's polling interval to a per-port setting calculated from the port speed. Signed-off-by: Oliver O'Halloran --- hw/p8-i2c.c | 23 +++++++---------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/hw/p8-i2c.c b/hw/p8-i2c.c index adefa2781..53f2c2ede 100644 --- a/hw/p8-i2c.c +++ b/hw/p8-i2c.c @@ -234,6 +234,7 @@ struct p8_i2c_master_port { uint32_t port_num; uint32_t bit_rate_div; /* Divisor to set bus speed*/ uint64_t byte_timeout; /* Timeout per byte */ + uint64_t poll_interval; /* Polling interval */ struct list_node link; }; @@ -1016,7 +1017,7 @@ static int p8_i2c_start_request(struct p8_i2c_master *master, struct i2c_request *req) { struct p8_i2c_master_port *port; - uint64_t cmd, poll_interval; + uint64_t cmd; int64_t rc; DBG("Starting req %d len=%d addr=%02x (offset=%x)\n", @@ -1151,10 +1152,10 @@ static int p8_i2c_start_request(struct p8_i2c_master *master, * cases */ if (!opal_booting() && master->irq_ok) - poll_interval = TIMER_POLL; + master->poll_interval = TIMER_POLL; else - poll_interval = master->poll_interval; - schedule_timer(&master->poller, poll_interval); + master->poll_interval = port->poll_interval; + schedule_timer(&master->poller, master->poll_interval); /* If we don't have a user-set timeout then use the master's default */ if (!req->timeout) @@ -1441,7 +1442,7 @@ static void p8_i2c_add_bus_prop(struct p8_i2c_master_port *port) static void p8_i2c_init_one(struct dt_node *i2cm, enum p8_i2c_master_type type) { struct p8_i2c_master_port *port; - uint32_t lb_freq, count, max_bus_speed; + uint32_t lb_freq, count; struct dt_node *i2cm_port; struct p8_i2c_master *master; struct list_head *chip_list; @@ -1546,7 +1547,6 @@ static void p8_i2c_init_one(struct dt_node *i2cm, enum p8_i2c_master_type type) /* Add master to chip's list */ list_add_tail(chip_list, &master->link); - max_bus_speed = 0; default_timeout = master->irq_ok ? I2C_TIMEOUT_IRQ_MS : @@ -1558,8 +1558,7 @@ static void p8_i2c_init_one(struct dt_node *i2cm, enum p8_i2c_master_type type) port->port_num = dt_prop_get_u32(i2cm_port, "reg"); port->master = master; speed = dt_prop_get_u32(i2cm_port, "bus-frequency"); - if (speed > max_bus_speed) - max_bus_speed = speed; + port->poll_interval = p8_i2c_get_poll_interval(speed); port->bit_rate_div = p8_i2c_get_bit_rate_divisor(lb_freq, speed); port->bus.dt_node = i2cm_port; @@ -1580,14 +1579,6 @@ static void p8_i2c_init_one(struct dt_node *i2cm, enum p8_i2c_master_type type) "ibm,port-name"), speed/1000); port++; } - - /* When at runtime and we have the i2c irq, we just use it - * (see p8_i2c_start_request), but in the situation where - * one of those isn't the case (e.g. during boot), we need - * a better poll interval to efficiently crank the i2c machine. - * poll_interval is that interval. - */ - master->poll_interval = (max_bus_speed) ? p8_i2c_get_poll_interval(max_bus_speed) : TIMER_POLL; } void p8_i2c_init(void)