mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: vitor <Vitor.Soares@synopsys.com>
To: Boris Brezillon <boris.brezillon@bootlin.com>,
	Wolfram Sang <wsa@the-dreams.de>, <linux-i2c@vger.kernel.org>,
	Jonathan Corbet <corbet@lwn.net>, <linux-doc@vger.kernel.org>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Arnd Bergmann <arnd@arndb.de>
Cc: Przemyslaw Sroka <psroka@cadence.com>,
	Arkadiusz Golec <agolec@cadence.com>,
	Alan Douglas <adouglas@cadence.com>,
	Bartosz Folta <bfolta@cadence.com>, Damian Kos <dkos@cadence.com>,
	Alicja Jurasik-Urbaniak <alicja@cadence.com>,
	Cyprian Wronka <cwronka@cadence.com>,
	Suresh Punnoose <sureshp@cadence.com>,
	Rafal Ciepiela <rafalc@cadence.com>,
	Thomas Petazzoni <thomas.petazzoni@bootlin.com>,
	Nishanth Menon <nm@ti.com>, Rob Herring <robh+dt@kernel.org>,
	Pawel Moll <pawel.moll@arm.com>,
	Mark Rutland <mark.rutland@arm.com>,
	Ian Campbell <ijc+devicetree@hellion.org.uk>,
	"Kumar Gala" <galak@codeaurora.org>, <devicetree@vger.kernel.org>,
	<linux-kernel@vger.kernel.org>,
	Vitor Soares <Vitor.Soares@synopsys.com>,
	Geert Uytterhoeven <geert@linux-m68k.org>,
	Linus Walleij <linus.walleij@linaro.org>,
	Xiang Lin <Xiang.Lin@synaptics.com>, <linux-gpio@vger.kernel.org>,
	Sekhar Nori <nsekhar@ti.com>, Przemyslaw Gaj <pgaj@cadence.com>
Subject: Re: [PATCH v5 01/10] i3c: Add core I3C infrastructure
Date: Thu, 28 Jun 2018 16:38:56 +0100	[thread overview]
Message-ID: <088dc947-da66-cec9-44a8-0f1097690bfd@synopsys.com> (raw)
In-Reply-To: <20180622104930.32050-2-boris.brezillon@bootlin.com>

Hi Boris,


On 22-06-2018 11:49, Boris Brezillon wrote:
> +static int of_i3c_master_add_i3c_dev(struct i3c_master_controller *master,
> +				     struct device_node *node, u32 *reg)
> +{
> +	struct i3c_device_info info = { };
> +	enum i3c_addr_slot_status addrstatus;
> +	struct i3c_device *i3cdev;
> +	u32 init_dyn_addr = 0;
> +
> +	if (reg[0]) {
> +		if (reg[0] > I3C_MAX_ADDR)
> +			return -EINVAL;
> +
> +		addrstatus = i3c_bus_get_addr_slot_status(master->bus, reg[0]);
> +		if (addrstatus != I3C_ADDR_SLOT_FREE)
> +			return -EINVAL;
> +	}
> +
> +	info.static_addr = reg[0];
> +
> +	if (!of_property_read_u32(node, "assigned-address", &init_dyn_addr)) {
> +		if (init_dyn_addr > I3C_MAX_ADDR)
> +			return -EINVAL;
> +
> +		addrstatus = i3c_bus_get_addr_slot_status(master->bus,
> +							  init_dyn_addr);
> +		if (addrstatus != I3C_ADDR_SLOT_FREE)
> +			return -EINVAL;
> +	}
> +
> +	info.pid = ((u64)reg[1] << 32) | reg[2];
> +
> +	if ((info.pid & GENMASK_ULL(63, 48)) ||
> +	    I3C_PID_RND_LOWER_32BITS(info.pid))
> +		return -EINVAL;
> +
> +	i3cdev = i3c_master_alloc_i3c_dev(master, &info, &i3c_device_type);
> +	if (IS_ERR(i3cdev))
> +		return PTR_ERR(i3cdev);
> +
> +	i3cdev->init_dyn_addr = init_dyn_addr;
> +	i3cdev->dev.of_node = node;
> +	list_add_tail(&i3cdev->common.node, &master->bus->devs.i3c);
> +
> +	return 0;
> +}
> +

I'm writing the driver for the Synopsys master and but now I getting an 
issue.

I use the "slot" of the device to do all transfers, something like you 
use in DAA. I using the master_priv to save the "slot" per device but 
the problem is when I call the i3c_master_add_i3c_dev_locked() to 
retrieve the info I don't have it yet.

 From my analysis this can be solve with:
     - send PID, BCR and DCR when I call i3c_master_add_i3c_dev_locked() 
or similar function.
     - Pre-allocate an i3c_device -> attach it (slot data goes to 
master_priv) -> retrieve info -> if there is already an i3c_device with 
same PID destroy the pre-allocated one.
     - Replace the info.dyn_address with a structure with dyn_address 
and slot and use it in CCC structure.

This is something that will need to be supported for I3C HCI spec too. 
Do you have any suggestion?

Best regards,
Vitor Soares



  parent reply	other threads:[~2018-06-28 15:39 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-06-22 10:49 [PATCH v5 00/10] Add the I3C subsystem Boris Brezillon
2018-06-22 10:49 ` [PATCH v5 01/10] i3c: Add core I3C infrastructure Boris Brezillon
2018-06-22 21:35   ` Peter Rosin
2018-06-23 10:17     ` Boris Brezillon
2018-06-23 21:40       ` Peter Rosin
2018-06-24 12:02         ` Boris Brezillon
2018-06-24 21:55           ` Peter Rosin
2018-06-25  8:03             ` Boris Brezillon
2018-06-28 15:38   ` vitor [this message]
2018-06-28 21:02     ` Boris Brezillon
2018-07-11 14:05   ` Arnd Bergmann
2018-06-22 10:49 ` [PATCH v5 02/10] docs: driver-api: Add I3C documentation Boris Brezillon
2018-06-26 21:07   ` Randy Dunlap
2018-06-27  7:20     ` Boris Brezillon
2018-06-22 10:49 ` [PATCH v5 03/10] i3c: Add sysfs ABI spec Boris Brezillon
2018-06-22 10:49 ` [PATCH v5 04/10] dt-bindings: i3c: Document core bindings Boris Brezillon
2018-07-11 14:10   ` Arnd Bergmann
2018-07-11 14:45     ` Boris Brezillon
2018-07-11 14:56       ` Arnd Bergmann
2018-06-22 10:49 ` [PATCH v5 05/10] dt-bindings: i3c: Add macros to help fill I3C/I2C device's reg property Boris Brezillon
2018-06-22 10:49 ` [PATCH v5 06/10] MAINTAINERS: Add myself as the I3C subsystem maintainer Boris Brezillon
2018-06-22 10:49 ` [PATCH v5 07/10] i3c: master: Add driver for Cadence IP Boris Brezillon
2018-07-11 14:19   ` Arnd Bergmann
2018-06-22 10:49 ` [PATCH v5 08/10] dt-bindings: i3c: Document Cadence I3C master bindings Boris Brezillon
2018-06-22 10:49 ` [PATCH v5 09/10] gpio: Add a driver for Cadence I3C GPIO expander Boris Brezillon
2018-06-22 16:04   ` Randy Dunlap
2018-06-22 18:35     ` Boris Brezillon
2018-06-26 19:07   ` Andy Shevchenko
2018-06-26 19:56     ` Boris Brezillon
2018-06-26 20:44       ` Andy Shevchenko
2018-06-26 21:46         ` Boris Brezillon
2018-06-27 17:53           ` Andy Shevchenko
2018-06-27 19:36             ` Boris Brezillon
2018-06-27 22:54               ` Joe Perches
2018-06-28  0:00                 ` Andy Shevchenko
2018-06-28  0:50                   ` Joe Perches
2018-06-27 22:14   ` Linus Walleij
2018-06-28  4:08     ` Wolfram Sang
2018-06-22 10:49 ` [PATCH v5 10/10] dt-bindings: gpio: Add bindings for Cadence I3C gpio expander Boris Brezillon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=088dc947-da66-cec9-44a8-0f1097690bfd@synopsys.com \
    --to=vitor.soares@synopsys.com \
    --cc=Xiang.Lin@synaptics.com \
    --cc=adouglas@cadence.com \
    --cc=agolec@cadence.com \
    --cc=alicja@cadence.com \
    --cc=arnd@arndb.de \
    --cc=bfolta@cadence.com \
    --cc=boris.brezillon@bootlin.com \
    --cc=corbet@lwn.net \
    --cc=cwronka@cadence.com \
    --cc=devicetree@vger.kernel.org \
    --cc=dkos@cadence.com \
    --cc=galak@codeaurora.org \
    --cc=geert@linux-m68k.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=ijc+devicetree@hellion.org.uk \
    --cc=linus.walleij@linaro.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-gpio@vger.kernel.org \
    --cc=linux-i2c@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=nm@ti.com \
    --cc=nsekhar@ti.com \
    --cc=pawel.moll@arm.com \
    --cc=pgaj@cadence.com \
    --cc=psroka@cadence.com \
    --cc=rafalc@cadence.com \
    --cc=robh+dt@kernel.org \
    --cc=sureshp@cadence.com \
    --cc=thomas.petazzoni@bootlin.com \
    --cc=wsa@the-dreams.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®