public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [U-Boot] [PATCH 0/22] Add driver model support for PCI
@ 2015-02-18 21:10 Simon Glass
  2015-02-18 21:10 ` [U-Boot] [PATCH 01/22] dm: i2c: Add a missing memory allocaton check Simon Glass
                   ` (21 more replies)
  0 siblings, 22 replies; 36+ messages in thread
From: Simon Glass @ 2015-02-18 21:10 UTC (permalink / raw)
  To: u-boot


This series is a collection of changes in core DM, sandbox, x86 and PCI code
to implement a PCI uclass and associated operations. Some basic tests are
provided as well.

As is becoming common with DM conversions, the existing structure (here
struct pci_controller) becomes per-bus uclass data. This allows the concept
of a 'hose' (generally a PCI host controller and a bus) to continue to exist
in the interim, even if it should not be needed in the end. This makes it
much easier to convert over existing code.

PCI buses are not scanned in the bind() method but only later when probe()
is called. This will be automatic if you access a bus, but it does mean that
if PCI is not used it will not be touched, in keeping with U-Boot's lazy-
init philosophy.

The existing 'pciauto' bus configuration code is still used, although it now
uses DM underneath. It works exclusively by reading and writing PCI config
and does not refer to DM data structures. The one change is to drop use of
the hose->current_busno field which is no longer required. The fact that
file works largely as before is an indication that a good level of
compatibility is achieved between DM and legacy PCI.

In order to support testing of PCI I/O and memory space, support has been
added to sandbox to allow mapping of these. This allows commands like 'md'
and 'iod' to display data from mapped PCI devices. Similarly, it is possible
to make changes to this space. This support relies on the existing
map_sysmem() and unmap_sysmem() calls which are now fairly widespread in
U-Boot.

Apart from the driver model tests (run with ./test/dm/test-dm.sh) you can
try out these commands which use the new 'swap_case' test device:

../u-boot -d b/sandbox/u-boot.dtb
....
=> iow.b 20000000 2
=> iod.b 20000000
0000: 02
=> mw.l 10000000 64436241
=> md.l 10000000 1
10000000: 44634261                               aBcD
=>

This shows an I/O access to 20000000, setting the value 2 which means to
swap the case. Then 'AbCd' is written to the memory space at 10000000 and
'aBcD' is read back.

The 'pci' command can be used as before.

Most existing PCI functions (in pci.h) still work, but route through driver
model. The file drivers/pci/pci.c is replaced when driver model is enabled
so not everything is present. A new pci_common.c file holds functions common
to driver model and the old system, and pci_compat.c contains functions I
would like to eventually deprecate.

Two x86 boards (coreboot and chromebook_link) are converted over to use
driver model for PCI.

Core driver model changes include:
- Addition of a new pre_probe() method for the uclass to set up devices just
before the device's probe() method is called
- A change in the ordering of when a device is marked as probed
- A dev_get_uclass_priv() accessor
- A tweak to the 'dm uclass' command to improve sequence number display

Notably missing from this series are functions to access PCI devices using
a 'struct udevice *'. Where there is no device tree entry for a bus device,
a generic PCI device is created in driver model to mirror the device, as
with I2C and SPI. Future work could add more real devices to x86 and create
a demand for these sorts of functions. Also we might store things like the
PCI base address registers (BARs) in data structures if there is a need.
These things are probably best developed as a need arises to avoid creating
infrastructure and overhead that may not be used.

This series is available at u-boot-dm.git branch pci-working.


Simon Glass (22):
  dm: i2c: Add a missing memory allocaton check
  sandbox: Correct device tree 'reg' properties for I2C and SPI
  fdt: Export fdtdec_get_number() for general use
  x86: Add a x86_ prefix to the x86-specific PCI functions
  RFC: x86: Split up arch_cpu_init()
  Correct map_sysmem() logic in do_mem_mw()
  fdt: Tighten up error handling in fdtdec_get_pci_addr()
  dm: core: Add dev_get_uclass_priv() to access uclass private data
  dm: core: Mark device as active before calling its probe() method
  dm: core: Add a uclass pre_probe() method for devices
  dm: Show both allocated and requested seq numbers in 'dm uclass'
  dm: pci: Move common PCI functions into their own file
  dm: pci: Add a uclass for PCI
  dm: sandbox: pci: Add PCI support for sandbox
  dm: sandbox: Add a simple PCI driver
  dm: sandbox: pci: Add a PCI emulation uclass
  dm: sandbox: Add a emulated PCI device as an example
  dm: sandbox: pci: Enable PCI for sandbox
  dm: x86: pci: Add a PCI driver for driver model
  dm: x86: pci: Convert coreboot to use driver model for pci
  dm: x86: pci: Convert chromebook_link to use driver model for pci
  dm: pci: Add driver model tests for PCI

 arch/sandbox/Kconfig                          |   7 +
 arch/sandbox/cpu/cpu.c                        |  37 +-
 arch/sandbox/dts/sandbox.dts                  |  26 +-
 arch/sandbox/include/asm/io.h                 |  16 +-
 arch/sandbox/include/asm/processor.h          |  12 +
 arch/sandbox/include/asm/test.h               |   7 +-
 arch/sandbox/include/asm/u-boot-sandbox.h     |  48 ++
 arch/sandbox/lib/Makefile                     |   2 +-
 arch/sandbox/lib/pci_io.c                     | 138 ++++++
 arch/x86/cpu/baytrail/early_uart.c            |   5 +-
 arch/x86/cpu/coreboot/pci.c                   |  63 +--
 arch/x86/cpu/ivybridge/bd82x6x.c              |  56 ++-
 arch/x86/cpu/ivybridge/cpu.c                  |  62 +--
 arch/x86/cpu/ivybridge/early_init.c           |  58 +--
 arch/x86/cpu/ivybridge/early_me.c             |  12 +-
 arch/x86/cpu/ivybridge/gma.c                  |   4 +-
 arch/x86/cpu/ivybridge/lpc.c                  |  75 +--
 arch/x86/cpu/ivybridge/northbridge.c          |   6 +-
 arch/x86/cpu/ivybridge/pch.c                  |   4 +-
 arch/x86/cpu/ivybridge/pci.c                  |  85 ++--
 arch/x86/cpu/ivybridge/report_platform.c      |   4 +-
 arch/x86/cpu/ivybridge/sata.c                 |  61 +--
 arch/x86/cpu/ivybridge/sdram.c                |  20 +-
 arch/x86/cpu/ivybridge/usb_ehci.c             |   4 +-
 arch/x86/cpu/ivybridge/usb_xhci.c             |   8 +-
 arch/x86/cpu/pci.c                            |  52 ++-
 arch/x86/cpu/quark/quark.c                    |   4 +-
 arch/x86/cpu/queensbay/tnc.c                  |   4 +-
 arch/x86/dts/chromebook_link.dts              |  10 +-
 arch/x86/include/asm/arch-ivybridge/bd82x6x.h |   1 -
 arch/x86/include/asm/pci.h                    |  20 +-
 arch/x86/include/asm/u-boot-x86.h             |   1 +
 arch/x86/lib/Makefile                         |   2 +
 arch/x86/lib/bios_interrupts.c                |  12 +-
 board/google/chromebook_link/link.c           |  15 +
 common/board_r.c                              |   2 +
 common/cmd_mem.c                              |   7 +-
 common/cmd_pci.c                              |  14 +-
 common/cmd_sf.c                               |   2 +-
 common/cros_ec.c                              |   2 +-
 configs/chromebook_link_defconfig             |   1 +
 configs/chromebox_panther_defconfig           |   1 +
 configs/coreboot-x86_defconfig                |   1 +
 configs/sandbox_defconfig                     |   3 +
 doc/driver-model/pci-info.txt                 |  70 +++
 drivers/core/device.c                         |  19 +-
 drivers/core/uclass.c                         |  10 +-
 drivers/gpio/at91_gpio.c                      |   2 +-
 drivers/gpio/bcm2835_gpio.c                   |   2 +-
 drivers/gpio/gpio-uclass.c                    |  22 +-
 drivers/gpio/intel_ich6_gpio.c                |  18 +-
 drivers/gpio/mxc_gpio.c                       |   2 +-
 drivers/gpio/omap_gpio.c                      |   2 +-
 drivers/gpio/s5p_gpio.c                       |   2 +-
 drivers/gpio/sandbox.c                        |   6 +-
 drivers/gpio/sunxi_gpio.c                     |   2 +-
 drivers/gpio/tegra_gpio.c                     |   2 +-
 drivers/i2c/i2c-uclass.c                      |   8 +-
 drivers/i2c/sandbox_i2c.c                     |   2 +-
 drivers/misc/Makefile                         |   1 +
 drivers/misc/cros_ec.c                        |   6 +-
 drivers/misc/cros_ec_i2c.c                    |   2 +-
 drivers/misc/cros_ec_sandbox.c                |   2 +-
 drivers/misc/cros_ec_spi.c                    |   4 +-
 drivers/misc/swap_case.c                      | 285 ++++++++++++
 drivers/mtd/spi/sf-uclass.c                   |   2 +-
 drivers/mtd/spi/sf_probe.c                    |   8 +-
 drivers/pci/Kconfig                           |  22 +
 drivers/pci/Makefile                          |  11 +-
 drivers/pci/pci-emul-uclass.c                 |  67 +++
 drivers/pci/pci-uclass.c                      | 639 ++++++++++++++++++++++++++
 drivers/pci/pci.c                             | 281 +----------
 drivers/pci/pci_auto.c                        |  16 +-
 drivers/pci/pci_common.c                      | 292 ++++++++++++
 drivers/pci/pci_compat.c                      |  43 ++
 drivers/pci/pci_sandbox.c                     |  79 ++++
 drivers/pci/pci_x86.c                         |  24 +
 drivers/serial/serial-uclass.c                |   4 +-
 drivers/spi/spi-uclass.c                      |   4 +-
 include/configs/sandbox.h                     |   4 +
 include/dm/device.h                           |  10 +
 include/dm/test.h                             |   1 +
 include/dm/uclass-id.h                        |   4 +
 include/dm/uclass-internal.h                  |   7 +-
 include/dm/uclass.h                           |   2 +
 include/fdtdec.h                              |  15 +-
 include/i2c.h                                 |   8 +-
 include/pci.h                                 | 411 ++++++++++++++++-
 lib/fdtdec.c                                  |   8 +-
 test/dm/Makefile                              |   1 +
 test/dm/cmd_dm.c                              |   4 +-
 test/dm/core.c                                |   9 +-
 test/dm/pci.c                                 |  59 +++
 test/dm/test-uclass.c                         |  16 +-
 test/dm/test.dts                              |  17 +
 95 files changed, 2834 insertions(+), 677 deletions(-)
 create mode 100644 arch/sandbox/include/asm/processor.h
 create mode 100644 arch/sandbox/lib/pci_io.c
 create mode 100644 doc/driver-model/pci-info.txt
 create mode 100644 drivers/misc/swap_case.c
 create mode 100644 drivers/pci/pci-emul-uclass.c
 create mode 100644 drivers/pci/pci-uclass.c
 create mode 100644 drivers/pci/pci_common.c
 create mode 100644 drivers/pci/pci_compat.c
 create mode 100644 drivers/pci/pci_sandbox.c
 create mode 100644 drivers/pci/pci_x86.c
 create mode 100644 test/dm/pci.c

-- 
2.2.0.rc0.207.ga3a616c

^ permalink raw reply	[flat|nested] 36+ messages in thread

end of thread, other threads:[~2015-03-05  4:10 UTC | newest]

Thread overview: 36+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-02-18 21:10 [U-Boot] [PATCH 0/22] Add driver model support for PCI Simon Glass
2015-02-18 21:10 ` [U-Boot] [PATCH 01/22] dm: i2c: Add a missing memory allocaton check Simon Glass
2015-02-19  7:41   ` Heiko Schocher
2015-03-05  4:09     ` Simon Glass
2015-02-18 21:10 ` [U-Boot] [PATCH 02/22] sandbox: Correct device tree 'reg' properties for I2C and SPI Simon Glass
2015-02-25  8:20   ` Bin Meng
2015-03-05  4:09     ` Simon Glass
2015-02-18 21:10 ` [U-Boot] [PATCH 03/22] fdt: Export fdtdec_get_number() for general use Simon Glass
2015-02-18 21:10 ` [U-Boot] [PATCH 04/22] x86: Add a x86_ prefix to the x86-specific PCI functions Simon Glass
2015-02-25  8:32   ` Bin Meng
2015-02-18 21:10 ` [U-Boot] [PATCH 05/22] RFC: x86: Split up arch_cpu_init() Simon Glass
2015-02-25  8:45   ` Bin Meng
2015-02-26  0:55     ` Simon Glass
2015-02-26  7:15       ` Bin Meng
2015-03-05  4:10         ` Simon Glass
2015-02-18 21:10 ` [U-Boot] [PATCH 06/22] Correct map_sysmem() logic in do_mem_mw() Simon Glass
2015-02-18 21:10 ` [U-Boot] [PATCH 07/22] fdt: Tighten up error handling in fdtdec_get_pci_addr() Simon Glass
2015-02-25  9:29   ` Bin Meng
2015-03-05  4:10     ` Simon Glass
2015-02-18 21:10 ` [U-Boot] [PATCH 08/22] dm: core: Add dev_get_uclass_priv() to access uclass private data Simon Glass
2015-02-26  7:26   ` Bin Meng
2015-03-05  4:10     ` Simon Glass
2015-02-18 21:10 ` [U-Boot] [PATCH 09/22] dm: core: Mark device as active before calling its probe() method Simon Glass
2015-02-18 21:10 ` [U-Boot] [PATCH 10/22] dm: core: Add a uclass pre_probe() method for devices Simon Glass
2015-02-18 21:10 ` [U-Boot] [PATCH 11/22] dm: Show both allocated and requested seq numbers in 'dm uclass' Simon Glass
2015-02-18 21:10 ` [U-Boot] [PATCH 12/22] dm: pci: Move common PCI functions into their own file Simon Glass
2015-02-18 21:10 ` [U-Boot] [PATCH 13/22] dm: pci: Add a uclass for PCI Simon Glass
2015-02-18 21:10 ` [U-Boot] [PATCH 14/22] dm: sandbox: pci: Add PCI support for sandbox Simon Glass
2015-02-18 21:10 ` [U-Boot] [PATCH 15/22] dm: sandbox: Add a simple PCI driver Simon Glass
2015-02-18 21:10 ` [U-Boot] [PATCH 16/22] dm: sandbox: pci: Add a PCI emulation uclass Simon Glass
2015-02-18 21:10 ` [U-Boot] [PATCH 17/22] dm: sandbox: Add a emulated PCI device as an example Simon Glass
2015-02-18 21:10 ` [U-Boot] [PATCH 18/22] dm: sandbox: pci: Enable PCI for sandbox Simon Glass
2015-02-18 21:10 ` [U-Boot] [PATCH 19/22] dm: x86: pci: Add a PCI driver for driver model Simon Glass
2015-02-18 21:10 ` [U-Boot] [PATCH 20/22] dm: x86: pci: Convert coreboot to use driver model for pci Simon Glass
2015-02-18 21:10 ` [U-Boot] [PATCH 21/22] dm: x86: pci: Convert chromebook_link " Simon Glass
2015-02-18 21:10 ` [U-Boot] [PATCH 22/22] dm: pci: Add driver model tests for PCI Simon Glass

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox