All of lore.kernel.org
 help / color / mirror / Atom feed
From: Bin Meng <bmeng.cn@gmail.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 4/7] dm: Expand the uclass for Peripheral Controller Hubs (PCH)
Date: Tue, 8 Dec 2015 21:45:59 +0800	[thread overview]
Message-ID: <CAEUhbmU0TQ=TQFD_8rf670AepeXh+fNuaz2gzQQSRMFsP1EWqw@mail.gmail.com> (raw)
In-Reply-To: <CAEUhbmWQQa6E7QujPs1WYNpWx0qN8ep1CKx-wXWtRMKZZOs7Ow@mail.gmail.com>

Hi Simon,

On Tue, Dec 8, 2015 at 9:23 PM, Bin Meng <bmeng.cn@gmail.com> wrote:
> Hi Simon,
>
> On Tue, Dec 1, 2015 at 12:11 PM, Simon Glass <sjg@chromium.org> wrote:
>> A Peripheral Controller Hub is an Intel concept - it is like the peripherals
>
> I believe the name is Platform Controller Hub.
>
>> on an SoC and is often in a separate chip from the CPU. Even when it is not
>> it is addressed and used differently. The chip is typically found on the
>
> "Even when it is not" (a separate chip) "it is addressed and used
> differently"? I feel it should be "it is addressed and used the same'?
>
>> first PCI device.
>
> This indicates b.d.f = 0.0.0, but for registers like RCBA, SPI base,
> those are actually on the LPC device (b.d.f = 0.1f.0). Maybe we can
> say: the chip is typically found on the first PCI bus and integrates
> multiple devices?
>
>>
>> We have a very simple uclass to support PCHs. Add a few operations, such as
>> setting up the devices on the PCH and finding the SPI controller base
>> address. Also move it into drivers/pch/ since we will be adding a few PCH
>> drivers.
>>
>> Signed-off-by: Simon Glass <sjg@chromium.org>
>> ---
>>
>>  arch/x86/lib/Makefile                      |  1 -
>>  drivers/Makefile                           |  1 +
>>  drivers/pch/Makefile                       |  5 +++
>>  {arch/x86/lib => drivers/pch}/pch-uclass.c | 32 +++++++++++++++
>>  include/pch.h                              | 66 ++++++++++++++++++++++++++++++
>>  5 files changed, 104 insertions(+), 1 deletion(-)
>>  create mode 100644 drivers/pch/Makefile
>>  rename {arch/x86/lib => drivers/pch}/pch-uclass.c (53%)
>>  create mode 100644 include/pch.h
>>
>> diff --git a/arch/x86/lib/Makefile b/arch/x86/lib/Makefile
>> index cd5ecb6..43792bc 100644
>> --- a/arch/x86/lib/Makefile
>> +++ b/arch/x86/lib/Makefile
>> @@ -24,7 +24,6 @@ obj-$(CONFIG_I8254_TIMER) += i8254.o
>>  ifndef CONFIG_DM_PCI
>>  obj-$(CONFIG_PCI) += pci_type1.o
>>  endif
>> -obj-y  += pch-uclass.o
>>  obj-y  += pirq_routing.o
>>  obj-y  += relocate.o
>>  obj-y += physmem.o
>> diff --git a/drivers/Makefile b/drivers/Makefile
>> index c9031f2..acc6af9 100644
>> --- a/drivers/Makefile
>> +++ b/drivers/Makefile
>> @@ -51,6 +51,7 @@ obj-y += hwmon/
>>  obj-y += misc/
>>  obj-y += pcmcia/
>>  obj-y += dfu/
>> +obj-$(CONFIG_X86) += pch/
>>  obj-y += rtc/
>>  obj-y += sound/
>>  obj-y += timer/
>> diff --git a/drivers/pch/Makefile b/drivers/pch/Makefile
>> new file mode 100644
>> index 0000000..d69a99c
>> --- /dev/null
>> +++ b/drivers/pch/Makefile
>> @@ -0,0 +1,5 @@
>> +#
>> +# SPDX-License-Identifier:     GPL-2.0+
>> +#
>> +
>> +obj-y += pch-uclass.o
>> diff --git a/arch/x86/lib/pch-uclass.c b/drivers/pch/pch-uclass.c
>> similarity index 53%
>> rename from arch/x86/lib/pch-uclass.c
>> rename to drivers/pch/pch-uclass.c
>> index 20dfa81..09a0107 100644
>> --- a/arch/x86/lib/pch-uclass.c
>> +++ b/drivers/pch/pch-uclass.c
>> @@ -7,10 +7,42 @@
>>
>>  #include <common.h>
>>  #include <dm.h>
>> +#include <pch.h>
>>  #include <dm/root.h>
>>
>>  DECLARE_GLOBAL_DATA_PTR;
>>
>> +int pch_init(struct udevice *dev)
>> +{
>> +       struct pch_ops *ops = pch_get_ops(dev);
>> +
>> +       if (!ops->init)
>> +               return -ENOSYS;
>> +
>> +       return ops->init(dev);
>> +}
>> +
>> +int pch_get_sbase(struct udevice *dev, ulong *sbasep)
>> +{
>> +       struct pch_ops *ops = pch_get_ops(dev);
>> +
>> +       *sbasep = 0;
>> +       if (!ops->get_sbase)
>> +               return -ENOSYS;
>> +
>> +       return ops->get_sbase(dev, sbasep);
>> +}
>> +
>> +int pch_get_version(struct udevice *dev)
>> +{
>> +       struct pch_ops *ops = pch_get_ops(dev);
>> +
>> +       if (!ops->get_version)
>> +               return -ENOSYS;
>> +
>> +       return ops->get_version(dev);
>> +}
>> +
>>  static int pch_uclass_post_bind(struct udevice *bus)
>>  {
>>         /*
>> diff --git a/include/pch.h b/include/pch.h
>> new file mode 100644
>> index 0000000..98bb5f2
>> --- /dev/null
>> +++ b/include/pch.h
>> @@ -0,0 +1,66 @@
>> +/*
>> + * Copyright (c) 2015 Google, Inc
>> + * Written by Simon Glass <sjg@chromium.org>
>> + *
>> + * SPDX-License-Identifier:    GPL-2.0+
>> + */
>> +
>> +#ifndef __pch_h
>> +#define __pch_h
>> +
>> +struct pch_ops {
>> +       /**
>> +        * init() - set up the PCH devices
>> +        *
>> +        * This makes sure that all the devices are ready for use. They are
>> +        * not actually started, just set up so that they can be probed.
>> +        */
>> +       int (*init)(struct udevice *dev);
>
> Do we need create such an init op? Should this be done in the driver's
> probe routine?
>
>> +
>> +       /**
>> +        * get_sbase() - get the address of SBASE
>
> SBASE -> SPI base
>
>> +        *
>> +        * @dev:        PCH device to check
>> +        * @sbasep:     Returns address of SBASE if available, else 0
>> +        * @return 0 if OK, -ve on error (e.g. there is no SBASE)
>> +        */
>> +       int (*get_sbase)(struct udevice *dev, ulong *sbasep);
>> +
>> +       /**
>> +        * get_version() - get the PCH version (e.g. 7 or 9)
>
> Can we create an enum for 7 and 9?
>
>> +        *
>> +        * @return version, or -1 if unknown
>> +        */
>> +       int (*get_version)(struct udevice *dev);
>> +};

I feel we should create an op for getting RCBA as well? For example,
the IRQ router driver needs it.

>> +
>> +#define pch_get_ops(dev)        ((struct pch_ops *)(dev)->driver->ops)
>> +
>> +/**
>> + * pch_init() - init a PCH
>> + *
>> + * This makes sure that all the devices are ready for use. They are
>> + * not actually started, just set up so that they can be probed.
>> + *
>> + * @dev:       PCH device to init
>> + * @return 0 if OK, -ve on error
>> + */
>> +int pch_init(struct udevice *dev);
>> +
>> +/**
>> + * pch_get_sbase() - get the address of SBASE
>> + *
>> + * @dev:       PCH device to check
>> + * @sbasep:    Returns address of SBASE if available, else 0
>> + * @return 0 if OK, -ve on error (e.g. there is no SBASE)
>> + */
>> +int pch_get_sbase(struct udevice *dev, ulong *sbasep);
>> +
>> +/**
>> + * pch_get_version() - get the PCH version (e.g. 7 or 9)
>> + *
>> + * @return version, or -ve if unknown/error
>> + */
>> +int pch_get_version(struct udevice *dev);
>> +
>> +#endif
>> --

Regards,
Bin

  reply	other threads:[~2015-12-08 13:45 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-12-01  4:11 [U-Boot] [PATCH 0/7] dm: x86: Convert ICH driver fully to driver model PCI API Simon Glass
2015-12-01  4:11 ` [U-Boot] [PATCH 1/7] dm: pci: Move pci_bus_to_hose() to compatibility Simon Glass
2015-12-08 13:22   ` Bin Meng
2015-12-01  4:11 ` [U-Boot] [PATCH 2/7] dm: pci: Add a function to write a BAR Simon Glass
2015-12-08 13:23   ` Bin Meng
2015-12-19  2:51     ` Simon Glass
2015-12-01  4:11 ` [U-Boot] [PATCH 3/7] dm: pci: Avoid using pci_bus_to_hose() in the uclass Simon Glass
2015-12-08 13:23   ` Bin Meng
2015-12-01  4:11 ` [U-Boot] [PATCH 4/7] dm: Expand the uclass for Peripheral Controller Hubs (PCH) Simon Glass
2015-12-08 13:23   ` Bin Meng
2015-12-08 13:45     ` Bin Meng [this message]
2015-12-17  4:09     ` Simon Glass
2015-12-17 10:09       ` Bin Meng
2015-12-18  2:46         ` Simon Glass
2015-12-01  4:11 ` [U-Boot] [PATCH 5/7] dm: x86: Add a driver for Intel PCH7 Simon Glass
2015-12-08 13:23   ` Bin Meng
2015-12-01  4:11 ` [U-Boot] [PATCH 6/7] dm: x86: Add a driver for Intel PCH9 Simon Glass
2015-12-08 13:23   ` Bin Meng
2015-12-01  4:11 ` [U-Boot] [PATCH 7/7] dm: x86: spi: Convert ICH SPI driver to driver model PCI API Simon Glass
2015-12-03 11:47   ` Jagan Teki
2015-12-08 13:24   ` Bin Meng
2015-12-17  4:10     ` Simon Glass

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='CAEUhbmU0TQ=TQFD_8rf670AepeXh+fNuaz2gzQQSRMFsP1EWqw@mail.gmail.com' \
    --to=bmeng.cn@gmail.com \
    --cc=u-boot@lists.denx.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.