From: Lee Jones <lee.jones@linaro.org>
To: Daniel Thompson <daniel.thompson@linaro.org>
Cc: baohua@kernel.org, stephan@gerhold.net, arnd@arndb.de,
linus.walleij@linaro.org, linux-kernel@vger.kernel.org,
broonie@kernel.org, linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v2 3/9] mfd: cs5535-mfd: Request shared IO regions centrally
Date: Mon, 21 Oct 2019 13:46:32 +0100 [thread overview]
Message-ID: <20191021124632.GH4365@dell> (raw)
In-Reply-To: <20191021122606.5q22j6wtyslwljco@holly.lan>
On Mon, 21 Oct 2019, Daniel Thompson wrote:
> On Mon, Oct 21, 2019 at 11:58:16AM +0100, Lee Jones wrote:
> > Prior to this patch, IO regions were requested via an MFD subsytem-level
> > .enable() call-back and similarly released by a .disable() call-back.
> > Double requests/releases were avoided by a centrally handled usage count
> > mechanism.
> >
> > This complexity can all be avoided by handling IO regions only once during
> > .probe() and .remove() of the parent device. Since this is the only
> > legitimate user of the aforementioned usage count mechanism, this patch
> > will allow it to be removed from MFD core in subsequent steps.
> >
> > Suggested-by: Daniel Thompson <daniel.thompson@linaro.org>
> > Signed-off-by: Lee Jones <lee.jones@linaro.org>
> > ---
> > drivers/mfd/cs5535-mfd.c | 72 +++++++++++++++++-----------------------
> > 1 file changed, 30 insertions(+), 42 deletions(-)
> >
> > diff --git a/drivers/mfd/cs5535-mfd.c b/drivers/mfd/cs5535-mfd.c
> > index 9ce6bbcdbda1..053e33447808 100644
> > --- a/drivers/mfd/cs5535-mfd.c
> > +++ b/drivers/mfd/cs5535-mfd.c
> > @@ -27,38 +27,6 @@ enum cs5535_mfd_bars {
> > NR_BARS,
> > };
> >
> > -static int cs5535_mfd_res_enable(struct platform_device *pdev)
> > -{
> > - struct resource *res;
> > -
> > - res = platform_get_resource(pdev, IORESOURCE_IO, 0);
> > - if (!res) {
> > - dev_err(&pdev->dev, "can't fetch device resource info\n");
> > - return -EIO;
> > - }
> > -
> > - if (!request_region(res->start, resource_size(res), DRV_NAME)) {
> > - dev_err(&pdev->dev, "can't request region\n");
> > - return -EIO;
> > - }
> > -
> > - return 0;
> > -}
> > -
> > -static int cs5535_mfd_res_disable(struct platform_device *pdev)
> > -{
> > - struct resource *res;
> > -
> > - res = platform_get_resource(pdev, IORESOURCE_IO, 0);
> > - if (!res) {
> > - dev_err(&pdev->dev, "can't fetch device resource info\n");
> > - return -EIO;
> > - }
> > -
> > - release_region(res->start, resource_size(res));
> > - return 0;
> > -}
> > -
> > static struct resource cs5535_mfd_resources[NR_BARS];
> >
> > static struct mfd_cell cs5535_mfd_cells[] = {
> > @@ -81,17 +49,11 @@ static struct mfd_cell cs5535_mfd_cells[] = {
> > .name = "cs5535-pms",
> > .num_resources = 1,
> > .resources = &cs5535_mfd_resources[PMS_BAR],
> > -
> > - .enable = cs5535_mfd_res_enable,
> > - .disable = cs5535_mfd_res_disable,
> > },
> > [ACPI_BAR] = {
> > .name = "cs5535-acpi",
> > .num_resources = 1,
> > .resources = &cs5535_mfd_resources[ACPI_BAR],
> > -
> > - .enable = cs5535_mfd_res_enable,
> > - .disable = cs5535_mfd_res_disable,
> > },
> > };
> >
> > @@ -109,7 +71,6 @@ static int cs5535_mfd_probe(struct pci_dev *pdev,
> > if (err)
> > return err;
> >
> > - /* fill in IO range for each cell; subdrivers handle the region */
> > for (i = 0; i < NR_BARS; i++) {
> > struct mfd_cell *cell = &cs5535_mfd_cells[i];
> > struct resource *r = &cs5535_mfd_resources[i];
> > @@ -122,22 +83,47 @@ static int cs5535_mfd_probe(struct pci_dev *pdev,
> > r->end = pci_resource_end(pdev, i);
> > }
> >
> > + err = pci_request_region(pdev, PMS_BAR, DRV_NAME);
> > + if (err) {
> > + dev_err(&pdev->dev, "Failed to request PMS_BAR's IO region\n");
> > + goto err_disable;
> > + }
> > +
> > err = mfd_add_devices(&pdev->dev, PLATFORM_DEVID_NONE, cs5535_mfd_cells,
> > ARRAY_SIZE(cs5535_mfd_cells), NULL, 0, NULL);
> > if (err) {
> > dev_err(&pdev->dev,
> > "Failed to add CS5532 sub-devices: %d\n", err);
> > - goto err_disable;
> > + goto err_release_pms;
> > }
> >
> > - if (machine_is_olpc())
> > - mfd_clone_cell("cs5535-acpi", olpc_acpi_clones, ARRAY_SIZE(olpc_acpi_clones));
> > + if (machine_is_olpc()) {
> > + err = pci_request_region(pdev, ACPI_BAR, DRV_NAME);
> > + if (err) {
> > + dev_err(&pdev->dev,
> > + "Failed to request ACPI_BAR's IO region\n");
> > + goto err_remove_devices;
> > + }
> > +
> > + err = mfd_clone_cell("cs5535-acpi", olpc_acpi_clones,
> > + ARRAY_SIZE(olpc_acpi_clones));
> > + if (err) {
> > + dev_err(&pdev->dev, "Failed to clone MFD cell\n");
> > + goto err_release_acpi;
> > + }
> > + }
>
> Making the request_region() conditional on machine_is_olpc() seems to be
> best on the assumption that the cs5535-acpi is not otherwise used.
>
> I suspect the assumption is true but you have to combine knowledge from
> several bits of code to figure that out.
It is not used.
Will reply to your other comment.
--
Lee Jones [李琼斯]
Linaro Services Technical Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
WARNING: multiple messages have this Message-ID (diff)
From: Lee Jones <lee.jones@linaro.org>
To: Daniel Thompson <daniel.thompson@linaro.org>
Cc: arnd@arndb.de, broonie@kernel.org, linus.walleij@linaro.org,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, baohua@kernel.org,
stephan@gerhold.net
Subject: Re: [PATCH v2 3/9] mfd: cs5535-mfd: Request shared IO regions centrally
Date: Mon, 21 Oct 2019 13:46:32 +0100 [thread overview]
Message-ID: <20191021124632.GH4365@dell> (raw)
In-Reply-To: <20191021122606.5q22j6wtyslwljco@holly.lan>
On Mon, 21 Oct 2019, Daniel Thompson wrote:
> On Mon, Oct 21, 2019 at 11:58:16AM +0100, Lee Jones wrote:
> > Prior to this patch, IO regions were requested via an MFD subsytem-level
> > .enable() call-back and similarly released by a .disable() call-back.
> > Double requests/releases were avoided by a centrally handled usage count
> > mechanism.
> >
> > This complexity can all be avoided by handling IO regions only once during
> > .probe() and .remove() of the parent device. Since this is the only
> > legitimate user of the aforementioned usage count mechanism, this patch
> > will allow it to be removed from MFD core in subsequent steps.
> >
> > Suggested-by: Daniel Thompson <daniel.thompson@linaro.org>
> > Signed-off-by: Lee Jones <lee.jones@linaro.org>
> > ---
> > drivers/mfd/cs5535-mfd.c | 72 +++++++++++++++++-----------------------
> > 1 file changed, 30 insertions(+), 42 deletions(-)
> >
> > diff --git a/drivers/mfd/cs5535-mfd.c b/drivers/mfd/cs5535-mfd.c
> > index 9ce6bbcdbda1..053e33447808 100644
> > --- a/drivers/mfd/cs5535-mfd.c
> > +++ b/drivers/mfd/cs5535-mfd.c
> > @@ -27,38 +27,6 @@ enum cs5535_mfd_bars {
> > NR_BARS,
> > };
> >
> > -static int cs5535_mfd_res_enable(struct platform_device *pdev)
> > -{
> > - struct resource *res;
> > -
> > - res = platform_get_resource(pdev, IORESOURCE_IO, 0);
> > - if (!res) {
> > - dev_err(&pdev->dev, "can't fetch device resource info\n");
> > - return -EIO;
> > - }
> > -
> > - if (!request_region(res->start, resource_size(res), DRV_NAME)) {
> > - dev_err(&pdev->dev, "can't request region\n");
> > - return -EIO;
> > - }
> > -
> > - return 0;
> > -}
> > -
> > -static int cs5535_mfd_res_disable(struct platform_device *pdev)
> > -{
> > - struct resource *res;
> > -
> > - res = platform_get_resource(pdev, IORESOURCE_IO, 0);
> > - if (!res) {
> > - dev_err(&pdev->dev, "can't fetch device resource info\n");
> > - return -EIO;
> > - }
> > -
> > - release_region(res->start, resource_size(res));
> > - return 0;
> > -}
> > -
> > static struct resource cs5535_mfd_resources[NR_BARS];
> >
> > static struct mfd_cell cs5535_mfd_cells[] = {
> > @@ -81,17 +49,11 @@ static struct mfd_cell cs5535_mfd_cells[] = {
> > .name = "cs5535-pms",
> > .num_resources = 1,
> > .resources = &cs5535_mfd_resources[PMS_BAR],
> > -
> > - .enable = cs5535_mfd_res_enable,
> > - .disable = cs5535_mfd_res_disable,
> > },
> > [ACPI_BAR] = {
> > .name = "cs5535-acpi",
> > .num_resources = 1,
> > .resources = &cs5535_mfd_resources[ACPI_BAR],
> > -
> > - .enable = cs5535_mfd_res_enable,
> > - .disable = cs5535_mfd_res_disable,
> > },
> > };
> >
> > @@ -109,7 +71,6 @@ static int cs5535_mfd_probe(struct pci_dev *pdev,
> > if (err)
> > return err;
> >
> > - /* fill in IO range for each cell; subdrivers handle the region */
> > for (i = 0; i < NR_BARS; i++) {
> > struct mfd_cell *cell = &cs5535_mfd_cells[i];
> > struct resource *r = &cs5535_mfd_resources[i];
> > @@ -122,22 +83,47 @@ static int cs5535_mfd_probe(struct pci_dev *pdev,
> > r->end = pci_resource_end(pdev, i);
> > }
> >
> > + err = pci_request_region(pdev, PMS_BAR, DRV_NAME);
> > + if (err) {
> > + dev_err(&pdev->dev, "Failed to request PMS_BAR's IO region\n");
> > + goto err_disable;
> > + }
> > +
> > err = mfd_add_devices(&pdev->dev, PLATFORM_DEVID_NONE, cs5535_mfd_cells,
> > ARRAY_SIZE(cs5535_mfd_cells), NULL, 0, NULL);
> > if (err) {
> > dev_err(&pdev->dev,
> > "Failed to add CS5532 sub-devices: %d\n", err);
> > - goto err_disable;
> > + goto err_release_pms;
> > }
> >
> > - if (machine_is_olpc())
> > - mfd_clone_cell("cs5535-acpi", olpc_acpi_clones, ARRAY_SIZE(olpc_acpi_clones));
> > + if (machine_is_olpc()) {
> > + err = pci_request_region(pdev, ACPI_BAR, DRV_NAME);
> > + if (err) {
> > + dev_err(&pdev->dev,
> > + "Failed to request ACPI_BAR's IO region\n");
> > + goto err_remove_devices;
> > + }
> > +
> > + err = mfd_clone_cell("cs5535-acpi", olpc_acpi_clones,
> > + ARRAY_SIZE(olpc_acpi_clones));
> > + if (err) {
> > + dev_err(&pdev->dev, "Failed to clone MFD cell\n");
> > + goto err_release_acpi;
> > + }
> > + }
>
> Making the request_region() conditional on machine_is_olpc() seems to be
> best on the assumption that the cs5535-acpi is not otherwise used.
>
> I suspect the assumption is true but you have to combine knowledge from
> several bits of code to figure that out.
It is not used.
Will reply to your other comment.
--
Lee Jones [李琼斯]
Linaro Services Technical Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
next prev parent reply other threads:[~2019-10-21 12:46 UTC|newest]
Thread overview: 68+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-10-21 10:58 [PATCH v2 0/9] Simplify MFD Core Lee Jones
2019-10-21 10:58 ` Lee Jones
2019-10-21 10:58 ` [PATCH v2 1/9] mfd: cs5535-mfd: Use PLATFORM_DEVID_* defines and tidy error message Lee Jones
2019-10-21 10:58 ` Lee Jones
2019-10-21 11:15 ` Daniel Thompson
2019-10-21 11:15 ` Daniel Thompson
2019-10-21 11:33 ` Lee Jones
2019-10-21 11:33 ` Lee Jones
2019-10-21 11:35 ` Lee Jones
2019-10-21 11:35 ` Lee Jones
2019-10-21 10:58 ` [PATCH v2 2/9] mfd: cs5535-mfd: Remove mfd_cell->id hack Lee Jones
2019-10-21 10:58 ` Lee Jones
2019-10-21 11:11 ` Daniel Thompson
2019-10-21 11:11 ` Daniel Thompson
2019-10-21 11:46 ` Lee Jones
2019-10-21 11:46 ` Lee Jones
2019-10-21 10:58 ` [PATCH v2 3/9] mfd: cs5535-mfd: Request shared IO regions centrally Lee Jones
2019-10-21 10:58 ` Lee Jones
2019-10-21 12:26 ` Daniel Thompson
2019-10-21 12:26 ` Daniel Thompson
2019-10-21 12:46 ` Lee Jones [this message]
2019-10-21 12:46 ` Lee Jones
2019-10-21 10:58 ` [PATCH v2 4/9] mfd: cs5535-mfd: Register clients using their own dedicated MFD cell entries Lee Jones
2019-10-21 10:58 ` Lee Jones
2019-10-21 12:29 ` Daniel Thompson
2019-10-21 12:29 ` Daniel Thompson
2019-10-21 13:21 ` Lee Jones
2019-10-21 13:21 ` Lee Jones
2019-10-21 10:58 ` [PATCH v2 5/9] mfd: mfd-core: Remove mfd_clone_cell() Lee Jones
2019-10-21 10:58 ` Lee Jones
2019-10-21 12:29 ` Daniel Thompson
2019-10-21 12:29 ` Daniel Thompson
2019-10-21 10:58 ` [PATCH v2 6/9] x86: olpc: Remove invocation of MFD's .enable()/.disable() call-backs Lee Jones
2019-10-21 10:58 ` Lee Jones
2019-10-21 12:17 ` Daniel Thompson
2019-10-21 12:17 ` Daniel Thompson
2019-10-21 10:58 ` [PATCH v2 7/9] mfd: mfd-core: Protect against NULL call-back function pointer Lee Jones
2019-10-21 10:58 ` Lee Jones
2019-10-21 12:30 ` Daniel Thompson
2019-10-21 12:30 ` Daniel Thompson
2019-10-21 12:32 ` Daniel Thompson
2019-10-21 12:32 ` Daniel Thompson
2019-10-21 12:40 ` Lee Jones
2019-10-21 12:40 ` Lee Jones
2019-10-21 10:58 ` [PATCH v2 8/9] mfd: mfd-core: Remove usage counting for .{en, dis}able() call-backs Lee Jones
2019-10-21 10:58 ` [PATCH v2 8/9] mfd: mfd-core: Remove usage counting for .{en,dis}able() call-backs Lee Jones
2019-10-21 12:33 ` Daniel Thompson
2019-10-21 12:33 ` Daniel Thompson
2019-10-21 10:58 ` [PATCH v2 9/9] mfd: mfd-core: Move pdev->mfd_cell creation back into mfd_add_device() Lee Jones
2019-10-21 10:58 ` Lee Jones
2019-10-21 12:45 ` Daniel Thompson
2019-10-21 12:45 ` Daniel Thompson
2019-10-21 11:29 ` [PATCH v2 0/9] Simplify MFD Core Arnd Bergmann
2019-10-21 11:29 ` Arnd Bergmann
2019-10-21 11:39 ` Lee Jones
2019-10-21 11:39 ` Lee Jones
2019-10-21 11:44 ` Lubomir Rintel
2019-10-21 11:44 ` Lubomir Rintel
2019-10-21 11:53 ` Lee Jones
2019-10-21 11:53 ` Lee Jones
2019-10-21 12:21 ` Lubomir Rintel
2019-10-21 12:21 ` Lubomir Rintel
2019-10-21 13:01 ` Lee Jones
2019-10-21 13:01 ` Lee Jones
2019-11-01 9:07 ` Lee Jones
2019-11-01 9:07 ` Lee Jones
2019-11-01 15:01 ` Lubomir Rintel
2019-11-01 15:01 ` Lubomir Rintel
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=20191021124632.GH4365@dell \
--to=lee.jones@linaro.org \
--cc=arnd@arndb.de \
--cc=baohua@kernel.org \
--cc=broonie@kernel.org \
--cc=daniel.thompson@linaro.org \
--cc=linus.walleij@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=stephan@gerhold.net \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.