All of lore.kernel.org
 help / color / mirror / Atom feed
From: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
To: Thomas Zimmermann <tzimmermann@suse.de>
Cc: David Airlie <airlied@linux.ie>,
	dri-devel <dri-devel@lists.freedesktop.org>
Subject: Re: [PATCH v2 12/12] drm/gma500: Move GTT memory-range setup into helper
Date: Wed, 9 Mar 2022 13:39:12 +0100	[thread overview]
Message-ID: <CAMeQTsZZ+fYebhiz+Xy-9y2Jsnwc5cJs0JTBf1T0_483HE4Kgw@mail.gmail.com> (raw)
In-Reply-To: <20220308195222.13471-13-tzimmermann@suse.de>

On Tue, Mar 8, 2022 at 8:52 PM Thomas Zimmermann <tzimmermann@suse.de> wrote:
>
> Move the setup code for GTT/GATT memory ranges into a new helper and
> call the function from psb_gtt_init() and psb_gtt_resume(). Removes
> code duplication.

LGTM
Acked-by: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>

>
> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
> ---
>  drivers/gpu/drm/gma500/gtt.c | 153 +++++++++++++++--------------------
>  1 file changed, 64 insertions(+), 89 deletions(-)
>
> diff --git a/drivers/gpu/drm/gma500/gtt.c b/drivers/gpu/drm/gma500/gtt.c
> index 83d9a9f7c73c..379bc218aa6b 100644
> --- a/drivers/gpu/drm/gma500/gtt.c
> +++ b/drivers/gpu/drm/gma500/gtt.c
> @@ -182,68 +182,91 @@ static void psb_gtt_clear(struct drm_psb_private *pdev)
>         (void)ioread32(pdev->gtt_map + i - 1);
>  }
>
> -int psb_gtt_init(struct drm_device *dev)
> +static void psb_gtt_init_ranges(struct drm_psb_private *dev_priv)
>  {
> -       struct drm_psb_private *dev_priv = to_drm_psb_private(dev);
> +       struct drm_device *dev = &dev_priv->dev;
>         struct pci_dev *pdev = to_pci_dev(dev->dev);
>         struct psb_gtt *pg = &dev_priv->gtt;
> -       unsigned gtt_pages;
> -       int ret;
> -
> -       mutex_init(&dev_priv->gtt_mutex);
> -
> -       ret = psb_gtt_enable(dev_priv);
> -       if (ret)
> -               goto err_mutex_destroy;
> +       resource_size_t gtt_phys_start, mmu_gatt_start, gtt_start, gtt_pages,
> +                       gatt_start, gatt_pages;
> +       struct resource *gtt_mem;
>
>         /* The root resource we allocate address space from */
> -       pg->gtt_phys_start = dev_priv->pge_ctl & PAGE_MASK;
> +       gtt_phys_start = dev_priv->pge_ctl & PAGE_MASK;
>
>         /*
> -        *      The video mmu has a hw bug when accessing 0x0D0000000.
> -        *      Make gatt start at 0x0e000,0000. This doesn't actually
> -        *      matter for us but may do if the video acceleration ever
> -        *      gets opened up.
> +        * The video MMU has a HW bug when accessing 0x0d0000000. Make
> +        * GATT start at 0x0e0000000. This doesn't actually matter for
> +        * us now, but maybe will if the video acceleration ever gets
> +        * opened up.
>          */
> -       pg->mmu_gatt_start = 0xE0000000;
> +       mmu_gatt_start = 0xe0000000;
> +
> +       gtt_start = pci_resource_start(pdev, PSB_GTT_RESOURCE);
> +       gtt_pages = pci_resource_len(pdev, PSB_GTT_RESOURCE) >> PAGE_SHIFT;
>
> -       pg->gtt_start = pci_resource_start(pdev, PSB_GTT_RESOURCE);
> -       gtt_pages = pci_resource_len(pdev, PSB_GTT_RESOURCE)
> -                                                               >> PAGE_SHIFT;
>         /* CDV doesn't report this. In which case the system has 64 gtt pages */
> -       if (pg->gtt_start == 0 || gtt_pages == 0) {
> +       if (!gtt_start || !gtt_pages) {
>                 dev_dbg(dev->dev, "GTT PCI BAR not initialized.\n");
>                 gtt_pages = 64;
> -               pg->gtt_start = dev_priv->pge_ctl;
> +               gtt_start = dev_priv->pge_ctl;
>         }
>
> -       pg->gatt_start = pci_resource_start(pdev, PSB_GATT_RESOURCE);
> -       pg->gatt_pages = pci_resource_len(pdev, PSB_GATT_RESOURCE)
> -                                                               >> PAGE_SHIFT;
> -       dev_priv->gtt_mem = &pdev->resource[PSB_GATT_RESOURCE];
> +       gatt_start = pci_resource_start(pdev, PSB_GATT_RESOURCE);
> +       gatt_pages = pci_resource_len(pdev, PSB_GATT_RESOURCE) >> PAGE_SHIFT;
>
> -       if (pg->gatt_pages == 0 || pg->gatt_start == 0) {
> +       if (!gatt_pages || !gatt_start) {
>                 static struct resource fudge;   /* Preferably peppermint */
> -               /* This can occur on CDV systems. Fudge it in this case.
> -                  We really don't care what imaginary space is being allocated
> -                  at this point */
> +
> +               /*
> +                * This can occur on CDV systems. Fudge it in this case. We
> +                * really don't care what imaginary space is being allocated
> +                * at this point.
> +                */
>                 dev_dbg(dev->dev, "GATT PCI BAR not initialized.\n");
> -               pg->gatt_start = 0x40000000;
> -               pg->gatt_pages = (128 * 1024 * 1024) >> PAGE_SHIFT;
> -               /* This is a little confusing but in fact the GTT is providing
> -                  a view from the GPU into memory and not vice versa. As such
> -                  this is really allocating space that is not the same as the
> -                  CPU address space on CDV */
> +               gatt_start = 0x40000000;
> +               gatt_pages = (128 * 1024 * 1024) >> PAGE_SHIFT;
> +
> +               /*
> +                * This is a little confusing but in fact the GTT is providing
> +                * a view from the GPU into memory and not vice versa. As such
> +                * this is really allocating space that is not the same as the
> +                * CPU address space on CDV.
> +                */
>                 fudge.start = 0x40000000;
>                 fudge.end = 0x40000000 + 128 * 1024 * 1024 - 1;
>                 fudge.name = "fudge";
>                 fudge.flags = IORESOURCE_MEM;
> -               dev_priv->gtt_mem = &fudge;
> +
> +               gtt_mem = &fudge;
> +       } else {
> +               gtt_mem = &pdev->resource[PSB_GATT_RESOURCE];
>         }
>
> +       pg->gtt_phys_start = gtt_phys_start;
> +       pg->mmu_gatt_start = mmu_gatt_start;
> +       pg->gtt_start = gtt_start;
>         pg->gtt_pages = gtt_pages;
> +       pg->gatt_start = gatt_start;
> +       pg->gatt_pages = gatt_pages;
> +       dev_priv->gtt_mem = gtt_mem;
> +}
> +
> +int psb_gtt_init(struct drm_device *dev)
> +{
> +       struct drm_psb_private *dev_priv = to_drm_psb_private(dev);
> +       struct psb_gtt *pg = &dev_priv->gtt;
> +       int ret;
> +
> +       mutex_init(&dev_priv->gtt_mutex);
> +
> +       ret = psb_gtt_enable(dev_priv);
> +       if (ret)
> +               goto err_mutex_destroy;
>
> -       dev_priv->gtt_map = ioremap(pg->gtt_phys_start, gtt_pages << PAGE_SHIFT);
> +       psb_gtt_init_ranges(dev_priv);
> +
> +       dev_priv->gtt_map = ioremap(pg->gtt_phys_start, pg->gtt_pages << PAGE_SHIFT);
>         if (!dev_priv->gtt_map) {
>                 dev_err(dev->dev, "Failure to map gtt.\n");
>                 ret = -ENOMEM;
> @@ -264,9 +287,8 @@ int psb_gtt_init(struct drm_device *dev)
>  int psb_gtt_resume(struct drm_device *dev)
>  {
>         struct drm_psb_private *dev_priv = to_drm_psb_private(dev);
> -       struct pci_dev *pdev = to_pci_dev(dev->dev);
>         struct psb_gtt *pg = &dev_priv->gtt;
> -       unsigned int gtt_pages;
> +       unsigned int old_gtt_pages = pg->gtt_pages;
>         int ret;
>
>         /* Enable the GTT */
> @@ -274,61 +296,14 @@ int psb_gtt_resume(struct drm_device *dev)
>         if (ret)
>                 return ret;
>
> -       /* The root resource we allocate address space from */
> -       pg->gtt_phys_start = dev_priv->pge_ctl & PAGE_MASK;
> -
> -       /*
> -        *      The video mmu has a hw bug when accessing 0x0D0000000.
> -        *      Make gatt start at 0x0e000,0000. This doesn't actually
> -        *      matter for us but may do if the video acceleration ever
> -        *      gets opened up.
> -        */
> -       pg->mmu_gatt_start = 0xE0000000;
> -
> -       pg->gtt_start = pci_resource_start(pdev, PSB_GTT_RESOURCE);
> -       gtt_pages = pci_resource_len(pdev, PSB_GTT_RESOURCE) >> PAGE_SHIFT;
> -       /* CDV doesn't report this. In which case the system has 64 gtt pages */
> -       if (pg->gtt_start == 0 || gtt_pages == 0) {
> -               dev_dbg(dev->dev, "GTT PCI BAR not initialized.\n");
> -               gtt_pages = 64;
> -               pg->gtt_start = dev_priv->pge_ctl;
> -       }
> -
> -       pg->gatt_start = pci_resource_start(pdev, PSB_GATT_RESOURCE);
> -       pg->gatt_pages = pci_resource_len(pdev, PSB_GATT_RESOURCE) >> PAGE_SHIFT;
> -       dev_priv->gtt_mem = &pdev->resource[PSB_GATT_RESOURCE];
> +       psb_gtt_init_ranges(dev_priv);
>
> -       if (pg->gatt_pages == 0 || pg->gatt_start == 0) {
> -               static struct resource fudge;   /* Preferably peppermint */
> -               /*
> -                * This can occur on CDV systems. Fudge it in this case. We
> -                * really don't care what imaginary space is being allocated
> -                * at this point.
> -                */
> -               dev_dbg(dev->dev, "GATT PCI BAR not initialized.\n");
> -               pg->gatt_start = 0x40000000;
> -               pg->gatt_pages = (128 * 1024 * 1024) >> PAGE_SHIFT;
> -               /*
> -                * This is a little confusing but in fact the GTT is providing
> -                * a view from the GPU into memory and not vice versa. As such
> -                *  this is really allocating space that is not the same as the
> -                *  CPU address space on CDV.
> -                */
> -               fudge.start = 0x40000000;
> -               fudge.end = 0x40000000 + 128 * 1024 * 1024 - 1;
> -               fudge.name = "fudge";
> -               fudge.flags = IORESOURCE_MEM;
> -               dev_priv->gtt_mem = &fudge;
> -       }
> -
> -       if (gtt_pages != pg->gtt_pages) {
> +       if (old_gtt_pages != pg->gtt_pages) {
>                 dev_err(dev->dev, "GTT resume error.\n");
> -               ret = -EINVAL;
> +               ret = -ENODEV;
>                 goto err_psb_gtt_disable;
>         }
>
> -       pg->gtt_pages = gtt_pages;
> -
>         psb_gtt_clear(dev_priv);
>
>  err_psb_gtt_disable:
> --
> 2.35.1
>

  reply	other threads:[~2022-03-09 12:39 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-08 19:52 [PATCH v2 00/12] drm/gma500: Various cleanups to GEM code Thomas Zimmermann
2022-03-08 19:52 ` [PATCH v2 01/12] drm/gma500: Remove struct psb_gem_object.npage Thomas Zimmermann
2022-03-08 19:52 ` [PATCH v2 02/12] drm/gma500: Acquire reservation lock for GEM objects Thomas Zimmermann
2022-03-08 19:52 ` [PATCH v2 03/12] drm/gma500: Move GTT locking into GTT helpers Thomas Zimmermann
2022-03-08 19:52 ` [PATCH v2 04/12] drm/gma500: Remove struct psb_gtt.sem sempahore Thomas Zimmermann
2022-03-08 19:52 ` [PATCH v2 05/12] drm/gma500: Move GTT setup and restoration into helper funtions Thomas Zimmermann
2022-03-08 19:52 ` [PATCH v2 06/12] drm/gma500: Move GTT resume logic out of psb_gtt_init() Thomas Zimmermann
2022-03-08 19:52 ` [PATCH v2 07/12] drm/gma500: Cleanup GTT uninit and error handling Thomas Zimmermann
2022-03-08 19:52 ` [PATCH v2 08/12] drm/gma500: Split GTT init/resume/fini into GTT and GEM functions Thomas Zimmermann
2022-03-08 19:52 ` [PATCH v2 09/12] drm/gma500: Inline psb_gtt_restore() Thomas Zimmermann
2022-03-08 19:52 ` [PATCH v2 10/12] drm/gma500: Move GEM memory management functions to gem.c Thomas Zimmermann
2022-03-08 19:52 ` [PATCH v2 11/12] drm/gma500: Move GTT enable and disable code into helpers Thomas Zimmermann
2022-03-09 12:39   ` Patrik Jakobsson
2022-03-08 19:52 ` [PATCH v2 12/12] drm/gma500: Move GTT memory-range setup into helper Thomas Zimmermann
2022-03-09 12:39   ` Patrik Jakobsson [this message]
2022-03-16 16:45 ` [PATCH v2 00/12] drm/gma500: Various cleanups to GEM code Patrik Jakobsson
2022-03-16 19:13   ` Thomas Zimmermann

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=CAMeQTsZZ+fYebhiz+Xy-9y2Jsnwc5cJs0JTBf1T0_483HE4Kgw@mail.gmail.com \
    --to=patrik.r.jakobsson@gmail.com \
    --cc=airlied@linux.ie \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=tzimmermann@suse.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 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.