Received: by 2002:a05:7412:7c14:b0:fa:6e18:a558 with SMTP id ii20csp213668rdb; Mon, 22 Jan 2024 01:28:26 -0800 (PST) X-Google-Smtp-Source: AGHT+IEduqrLFfVUUnxl5TgnI0QMPqV4IbkTcMVEh6220gTKFLg34o4GwLwO0Vwa6tIAH8L9AzT3 X-Received: by 2002:a17:902:7794:b0:1d0:6ffd:6e85 with SMTP id o20-20020a170902779400b001d06ffd6e85mr1635115pll.125.1705915705683; Mon, 22 Jan 2024 01:28:25 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1705915705; cv=pass; d=google.com; s=arc-20160816; b=LTqzipTTFxIiBtJ7XhpN9iFZmnrYmO4sfeG/ItOinBFLPXrRRF4t4LB7/dYQllk4Eo D65AMMuCFtCtA/Zn3pLpcpK2E14kijifF/gEbUUvPt8L2IDH51JMy+c95wxJpzRe6p5g 1ibfAnsai75lvmJ3vFELsIUPUiYBQvnt8WuBd35CX1c+PjLWheYB4SSPPX3gPO+H8t0P Ec5boaIy3keafa8GeOdlXRhTqL1rXpghGRcVxUPt+qoYMn8awIBztA0ki+gxXNDOOKUO CizvlvKQja7f/mV18iuPvmDr5XpRyhuzRmmtAWcFdY2rPRAyNmzM8tpF3l4MrOEREZf1 tCjQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=user-agent:in-reply-to:content-disposition:mime-version :list-unsubscribe:list-subscribe:list-id:precedence:references :message-id:subject:cc:to:from:date; bh=HZWxeUX/dP98DxElXB3VPvgywpEQLVr85BY+nzB76qs=; fh=RJXnlk/X1W6z8Ceq/K0sfydAQVHvmu964O/Q8yNleZ0=; b=xJq+pHqixLppnc47wRdojpTnYhshX275e/cSESq46lVPcQPE8s20mGEqrn2Z6STKmp GyZa3/35M4W3Ro/q2mZhL+gLS8m4nn0lTyMrHaIm/IlgR9Q3QnlixFc8LZ9QbAEQCnwE D8ZNKldUD0KwR85BIINdOhNeOo1S2R0Zc8HTCymKBi8QMr1ZgYA+J6fenN4A799Higvh POqe8W5mh+jYCf26aVRFBdhVwqS2TKiTtbnLFvenomfVTuffDYAElxl4ztBYlMaHtGb0 xYMRI5Smc9zwM/h0BEUuIzfJzTg5WuauhMW0/6GwNX8/bn5HZK7R4f2CJ/UUuJYd3D1o V/9w== ARC-Authentication-Results: i=2; mx.google.com; arc=pass (i=1 spf=pass spfdomain=pengutronix.de); spf=pass (google.com: domain of linux-kernel+bounces-32590-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) smtp.mailfrom="linux-kernel+bounces-32590-linux.lists.archive=gmail.com@vger.kernel.org" Return-Path: Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org. [147.75.48.161]) by mx.google.com with ESMTPS id l9-20020a170903244900b001d346f6804fsi7824147pls.11.2024.01.22.01.28.25 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Jan 2024 01:28:25 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-32590-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) client-ip=147.75.48.161; Authentication-Results: mx.google.com; arc=pass (i=1 spf=pass spfdomain=pengutronix.de); spf=pass (google.com: domain of linux-kernel+bounces-32590-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) smtp.mailfrom="linux-kernel+bounces-32590-linux.lists.archive=gmail.com@vger.kernel.org" Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sy.mirrors.kernel.org (Postfix) with ESMTPS id D8A40B292B0 for ; Mon, 22 Jan 2024 09:04:19 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 7073138FAD; Mon, 22 Jan 2024 09:03:44 +0000 (UTC) Received: from metis.whiteo.stw.pengutronix.de (metis.whiteo.stw.pengutronix.de [185.203.201.7]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B8413374C1 for ; Mon, 22 Jan 2024 09:03:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.203.201.7 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1705914223; cv=none; b=qrExQUYjZiemr1vz5lAtc5zNRLe5IEK2cUbHssb0Iy9Aq37nq5Lx4I+uQKApA0iMnAK1h6x1t13IqN9egbJyYE0yylf9NhKnigj/MdxaVkvuCDUTlLcF5NNdYEUf7oaed8WPDw66hF5Bsr3IXJFN2vkQdmlKHPGIFJ73YEomBUQ= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1705914223; c=relaxed/simple; bh=VRDRrETopJdUCjO9x2jOWQzKPtqJ2TWmehvdawXzMfI=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=ne7CApJPjb0DFHTOfRSF84bIuPNJVkv55btND49PywEvz/7rQmEaJR7QfOUjqjAttTs3M/UHkyY8eqCplbkz0+2+S052y1x0IkKvTE6/B5IyI+EwpQbPqQA0ti0uMp9hGKmygVTYT2PXcdJCaln0fQHbQst+GOjIdEqkHeQI9ns= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de; spf=pass smtp.mailfrom=pengutronix.de; arc=none smtp.client-ip=185.203.201.7 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pengutronix.de Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.whiteo.stw.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1rRqDK-0000mb-Tn; Mon, 22 Jan 2024 10:03:30 +0100 Received: from [2a0a:edc0:2:b01:1d::c0] (helo=ptx.whiteo.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rRqDK-001YDU-9z; Mon, 22 Jan 2024 10:03:30 +0100 Received: from sha by ptx.whiteo.stw.pengutronix.de with local (Exim 4.92) (envelope-from ) id 1rRqDK-001AEF-72; Mon, 22 Jan 2024 10:03:30 +0100 Date: Mon, 22 Jan 2024 10:03:30 +0100 From: Sascha Hauer To: "Peng Fan (OSS)" Cc: Jassi Brar , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Dong Aisheng , Shawn Guo , Pengutronix Kernel Team , Fabio Estevam , NXP Linux Team , linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Peng Fan Subject: Re: [PATCH v2 2/3] mailbox: imx: get RR/TR registers num from Parameter register Message-ID: <20240122090330.GR4700@pengutronix.de> References: <20240122-imx-mailbox-v2-0-7b3c80333b92@nxp.com> <20240122-imx-mailbox-v2-2-7b3c80333b92@nxp.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20240122-imx-mailbox-v2-2-7b3c80333b92@nxp.com> X-Sent-From: Pengutronix Hildesheim X-URL: http://www.pengutronix.de/ X-Accept-Language: de,en X-Accept-Content-Type: text/plain User-Agent: Mutt/1.10.1 (2018-07-13) X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2 X-SA-Exim-Mail-From: sha@pengutronix.de X-SA-Exim-Scanned: No (on metis.whiteo.stw.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org Hi Peng, On Mon, Jan 22, 2024 at 02:19:24PM +0800, Peng Fan (OSS) wrote: > From: Peng Fan > > i.MX8ULP, i.MX93 MU has a Parameter register encoded as below: > BIT: 15 --- 8 | 7 --- 0 > RR_NUM TR_NUM > > So to make driver easy to support more variants, get the RR/TR > registers number from Parameter register. > > The patch only adds support the specific MU, such as ELE MU. > For generic MU, not add support for number larger than 4. > > Signed-off-by: Peng Fan > --- > drivers/mailbox/imx-mailbox.c | 46 ++++++++++++++++++++++++++++++++----------- > 1 file changed, 35 insertions(+), 11 deletions(-) > > diff --git a/drivers/mailbox/imx-mailbox.c b/drivers/mailbox/imx-mailbox.c > index 656171362fe9..f2a21baded29 100644 > --- a/drivers/mailbox/imx-mailbox.c > +++ b/drivers/mailbox/imx-mailbox.c > @@ -29,7 +29,9 @@ > #define IMX_MU_S4_CHANS 2 > #define IMX_MU_CHAN_NAME_SIZE 20 > > -#define IMX_MU_NUM_RR 4 > +#define IMX_MU_V2_PAR_OFF 0x4 > +#define IMX_MU_V2_TR_MASK GENMASK(7, 0) > +#define IMX_MU_V2_RR_MASK GENMASK(15, 8) > > #define IMX_MU_SECO_TX_TOUT (msecs_to_jiffies(3000)) > #define IMX_MU_SECO_RX_TOUT (msecs_to_jiffies(3000)) > @@ -93,10 +95,11 @@ struct imx_mu_priv { > struct clk *clk; > int irq[IMX_MU_CHANS]; > bool suspend; > - > - u32 xcr[IMX_MU_xCR_MAX]; > - > bool side_b; > + > + u32 xcr[IMX_MU_xCR_MAX]; > + u32 num_tr; > + u32 num_rr; > }; > > enum imx_mu_type { > @@ -264,18 +267,17 @@ static int imx_mu_generic_rxdb(struct imx_mu_priv *priv, > static int imx_mu_specific_tx(struct imx_mu_priv *priv, struct imx_mu_con_priv *cp, void *data) > { > u32 *arg = data; > + u32 num_tr = priv->num_tr; > int i, ret; > u32 xsr; > - u32 size, max_size, num_tr; > + u32 size, max_size; > > if (priv->dcfg->type & IMX_MU_V2_S4) { > size = ((struct imx_s4_rpc_msg_max *)data)->hdr.size; > max_size = sizeof(struct imx_s4_rpc_msg_max); > - num_tr = 8; This change looks unexpected here. num_tr used to be 8 here and now becomes 4 at maximum. Was this a bug? If yes, this deserves a separate patch with an explanation what was wrong here. > } else { > size = ((struct imx_sc_rpc_msg_max *)data)->hdr.size; > max_size = sizeof(struct imx_sc_rpc_msg_max); > - num_tr = 4; > } > > switch (cp->type) { > @@ -324,6 +326,7 @@ static int imx_mu_specific_rx(struct imx_mu_priv *priv, struct imx_mu_con_priv * > int i, ret; > u32 xsr; > u32 size, max_size; > + u32 num_rr = priv->num_rr; > > data = (u32 *)priv->msg; > > @@ -345,13 +348,13 @@ static int imx_mu_specific_rx(struct imx_mu_priv *priv, struct imx_mu_con_priv * > > for (i = 1; i < size; i++) { > ret = readl_poll_timeout(priv->base + priv->dcfg->xSR[IMX_MU_RSR], xsr, > - xsr & IMX_MU_xSR_RFn(priv->dcfg->type, i % 4), 0, > + xsr & IMX_MU_xSR_RFn(priv->dcfg->type, i % num_rr), 0, > 5 * USEC_PER_SEC); > if (ret) { > dev_err(priv->dev, "timeout read idx %d\n", i); > return ret; > } > - *data++ = imx_mu_read(priv, priv->dcfg->xRR + (i % 4) * 4); > + *data++ = imx_mu_read(priv, priv->dcfg->xRR + (i % num_rr) * 4); > } > > imx_mu_xcr_rmw(priv, IMX_MU_RCR, IMX_MU_xCR_RIEn(priv->dcfg->type, 0), 0); > @@ -737,11 +740,30 @@ static struct mbox_chan *imx_mu_seco_xlate(struct mbox_controller *mbox, > return imx_mu_xlate(mbox, sp); > } > > +static void imx_mu_get_tr_rr(struct imx_mu_priv *priv) > +{ > + u32 val; > + > + if (priv->dcfg->type & IMX_MU_V2) { > + val = imx_mu_read(priv, IMX_MU_V2_PAR_OFF); > + priv->num_tr = FIELD_GET(IMX_MU_V2_TR_MASK, val); > + priv->num_rr = FIELD_GET(IMX_MU_V2_RR_MASK, val); > + } else { > + priv->num_tr = 4; > + priv->num_rr = 4; > + } > +} > + > static void imx_mu_init_generic(struct imx_mu_priv *priv) > { > unsigned int i; > unsigned int val; > > + if (priv->num_rr > 4 || priv->num_tr > 4) { > + WARN_ONCE(true, "%s not support TR/RR larger than 4\n", __func__); > + return; > + } imx_mu_init_generic() is not called for all device types, nevertheless this should be treated as an error for all device types, so this check should be done where the variables are initialized. Also, please return an error rather than just issue a warning. Sascha -- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |