From patchwork Mon Oct 12 02:53:12 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Oliver O'Halloran X-Patchwork-Id: 1380601 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.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 4C8jz65dF3z9sSs for ; Mon, 12 Oct 2020 13:57:54 +1100 (AEDT) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=jxyso1i+; dkim-atps=neutral Received: from bilbo.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 4C8jz62glvzDqnF for ; Mon, 12 Oct 2020 13:57:54 +1100 (AEDT) X-Original-To: skiboot@lists.ozlabs.org Delivered-To: skiboot@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gmail.com (client-ip=2607:f8b0:4864:20::443; helo=mail-pf1-x443.google.com; envelope-from=oohall@gmail.com; receiver=) Authentication-Results: lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=jxyso1i+; dkim-atps=neutral Received: from mail-pf1-x443.google.com (mail-pf1-x443.google.com [IPv6:2607:f8b0:4864:20::443]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4C8jtQ1PHtzDqhD for ; Mon, 12 Oct 2020 13:53:49 +1100 (AEDT) Received: by mail-pf1-x443.google.com with SMTP id k8so12232883pfk.2 for ; Sun, 11 Oct 2020 19:53:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=FV0bZzcmHC9EUdUf/x0Gft64yu+Dsdgcg+r88tpsp/Q=; b=jxyso1i+BGXhHfzV57F9q+6LOfctI5Luz+/EYBfRBT3c5L0HDv0FKEjE5H+LAywhlW 5SiOjGFf5IBsE7wF2JQ7Tj+SrwsV5kBh7qhPEtMz+yFbnVB8LE2OZkOMdeXMcnFEft7X q9l5J503XOJkWbI12bf2IIyRYZmbhTTpvVkgNTubY+Z/A3ek2vSuR4GnP2ZHkOb7simf br1j+CUC11biX2kwEX7g3EnS737VyusWWs3B70aHBCcDOC7f9j3Hqtm8Uoe55xVRFb3V U/jQJ04mpRRfm5xpabqEjgNwWnxfo3AyYb+qlNXkiaYn4FYd7e9umihWc2gw57nAHCCr 3DOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=FV0bZzcmHC9EUdUf/x0Gft64yu+Dsdgcg+r88tpsp/Q=; b=cBnQwzBfq8j40yPV3eEnU0W4YKYA6zYJgWIYfDrX6ouPpvgJ6xJgf8HwIdW5lVo1ew DAoetZ8PSiEKOstuofOrEjRdlnWhuxPRtbFfEdf4Y6kMfd86It4TdGT/TeJq6hPoQExs w8d1s0LqrwjVR6/dLXK9QvBUBVI6juoYJ4Rb4XZUP3JVLmRNc5YfMqm8fApGFXoAWNj0 G9o9aBBDQ6TJZyivu/mWNAXaO+5xwZAl8H7UACRKa1epZQW8Un/EYuvXuC8GTpGFUETk SteAvdhA28TbdUnaB6guLXl+yeg0g/p5ykvpBMXPr9aQTEox3wRh7mKbW9C8EOSRMENB +qFA== X-Gm-Message-State: AOAM530QQXdPnLAeRQCQVgx5VhePMiIfOmN9TJJeYnzDJh9lnvNTtnE4 9Mm8yZNpAGsFxvhmqgxeOFoGpKhWw/WPKg== X-Google-Smtp-Source: ABdhPJxRQN5uFb1sPnqcBy/sOJsLQnMTWp4L7N5o922HCN1CrXmyNvHPsQm3GE2z+H3gY0N+MvOkQg== X-Received: by 2002:a17:90a:67c7:: with SMTP id g7mr18012975pjm.140.1602471227640; Sun, 11 Oct 2020 19:53:47 -0700 (PDT) Received: from localhost.ibm.com (14-200-206-90.tpgi.com.au. [14.200.206.90]) by smtp.gmail.com with ESMTPSA id g4sm17909258pgg.75.2020.10.11.19.53.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 11 Oct 2020 19:53:47 -0700 (PDT) From: Oliver O'Halloran To: skiboot@lists.ozlabs.org Date: Mon, 12 Oct 2020 13:53:12 +1100 Message-Id: <20201012025314.1070230-8-oohall@gmail.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20201012025314.1070230-1-oohall@gmail.com> References: <20201012025314.1070230-1-oohall@gmail.com> MIME-Version: 1.0 Subject: [Skiboot] [PATCH 08/10] hw/p8-i2c: Move port init into a separate function 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" Move it out in preparation for adding the ability to add new ports on the fly. Signed-off-by: Oliver O'Halloran --- hw/p8-i2c.c | 93 ++++++++++++++++++++++++++--------------------------- 1 file changed, 45 insertions(+), 48 deletions(-) diff --git a/hw/p8-i2c.c b/hw/p8-i2c.c index f01cbe8a0870..4abbad8673b4 100644 --- a/hw/p8-i2c.c +++ b/hw/p8-i2c.c @@ -1440,14 +1440,52 @@ 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) +static struct p8_i2c_master_port *p8_i2c_init_one_port(struct p8_i2c_master *m, + struct dt_node *n, uint64_t lb_freq) { struct p8_i2c_master_port *port; - uint32_t lb_freq, count; - struct dt_node *i2cm_port; + uint64_t def_timeout; + uint32_t speed, div; + + port = zalloc(sizeof(*port)); + if (!port) + return NULL; + + def_timeout = m->irq_ok ? I2C_TIMEOUT_IRQ_MS : I2C_TIMEOUT_POLL_MS; + + speed = dt_prop_get_u32_def(n, "bus-frequency", 100000); + div = p8_i2c_get_bit_rate_divisor(lb_freq, speed); + + /* p8-i2c stuff */ + port->master = m; + port->bit_rate_div = div; + port->poll_interval = p8_i2c_get_poll_interval(speed); + port->port_num = dt_prop_get_u32(n, "reg"); + port->byte_timeout = dt_prop_get_u32_def(n, "timeout-ms", def_timeout); + list_add_tail(&m->ports, &port->link); + + /* core i2c stuff */ + port->bus.dt_node = n; + port->bus.queue_req = p8_i2c_queue_request; + port->bus.run_req = p8_i2c_run_request; + i2c_add_bus(&port->bus); + + /* add the bus name and compatible (if needed) */ + p8_i2c_add_bus_prop(port); + + prlog(PR_INFO, " P%d: <%s> %d kHz\n", port->port_num, + (char *) dt_prop_get(n, "ibm,port-name"), speed / 1000); + + return port; +} + +static void p8_i2c_init_one(struct dt_node *i2cm, enum p8_i2c_master_type type) +{ struct p8_i2c_master *master; struct list_head *chip_list; - uint64_t ex_stat, default_timeout; + struct dt_node *i2cm_port; + uint64_t ex_stat; + uint32_t lb_freq; int64_t rc; master = zalloc(sizeof(*master)); @@ -1533,53 +1571,12 @@ static void p8_i2c_init_one(struct dt_node *i2cm, enum p8_i2c_master_type type) if (master->type == I2C_CENTAUR) centaur_enable_sensor_cache(master->chip_id); - /* Allocate ports driven by this master */ - count = 0; - dt_for_each_child(i2cm, i2cm_port) - count++; - - port = zalloc(sizeof(*port) * count); - if (!port) { - log_simple_error(&e_info(OPAL_RC_I2C_INIT), - "I2C: Insufficient memory\n"); - free(master); - return; - } - /* Add master to chip's list */ list_add_tail(chip_list, &master->link); - default_timeout = master->irq_ok ? - I2C_TIMEOUT_IRQ_MS : - I2C_TIMEOUT_POLL_MS; - - dt_for_each_child(i2cm, i2cm_port) { - uint32_t speed; - - port->port_num = dt_prop_get_u32(i2cm_port, "reg"); - port->master = master; - speed = dt_prop_get_u32(i2cm_port, "bus-frequency"); - 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; - port->bus.queue_req = p8_i2c_queue_request; - port->bus.run_req = p8_i2c_run_request; - - port->byte_timeout = dt_prop_get_u32_def(i2cm_port, - "timeout-ms", default_timeout); - - i2c_add_bus(&port->bus); - list_add_tail(&master->ports, &port->link); - - /* Add OPAL properties to the bus node */ - p8_i2c_add_bus_prop(port); - prlog(PR_INFO, " P%d: <%s> %d kHz\n", - port->port_num, - (char *)dt_prop_get(i2cm_port, - "ibm,port-name"), speed/1000); - port++; - } + /* initialise ports */ + dt_for_each_child(i2cm, i2cm_port) + p8_i2c_init_one_port(master, i2cm_port, lb_freq); } void p8_i2c_init(void)