[PATCH v13 0/9] LPC: legacy ISA I/O support

2018-02-13 Thread John Garry
This patchset supports the IPMI-bt device attached to the Low-Pin-Count
interface implemented on Hisilicon Hip06/Hip07 SoC.
---
| LPC host|
| |
---
 |
_V___LPC
  |   |
  V   V
 
 |  BT(ipmi)|
 

When master accesses those peripherals beneath the Hip06/Hip07 LPC, a specific
LPC driver is needed to make LPC host generate the standard LPC I/O cycles with
the target peripherals'I/O port addresses. But on curent arm64 world, there is
no real I/O accesses. All the I/O operations through in/out accessors are based
on MMIO ranges; on Hip06/Hip07 LPC the I/O accesses are performed through driver
specific accessors rather than MMIO.
To solve this issue and keep the relevant existing peripherals' drivers 
untouched,
this patchset:
   - introduces a generic I/O space management framework, LIBIO, to support I/O
 operations on host controllers operating either on MMIO buses or on buses
 requiring specific driver I/O accessors;
   - redefines the in/out accessors to provide a unified interface for both MMIO
 and driver specific I/O operations. Using LIBIO, th call of in/out() from
 the host children drivers, such as ipmi-si, will be redirected to the
 corresponding device-specific I/O hooks to perform the I/O accesses.

Based on this patch-set, all the I/O accesses to Hip06/Hip07 LPC peripherals can
be supported without any changes on the existing ipmi-si driver.

The whole patchset has been tested on Hip07 D05 board both using DTB and ACPI.

Differences to v12:
- Addressed ACPI comments from Rafael and Andy, including:
 - added SPDX license identifiers (other new files in the series got this 
also)
 - fixed style issues, like superflous newlines and symbol naming
 - add fuller acpi_indirectio.c patch commit message
 - dropped acpi_indirectio_host_data (author's decision) to simplify
- added Rob Herring's tag
- rebase to linux-next 20180212

Differences to v11:
- fixed build errors for i386, m68k, and tile
- added a comment in LPC driver commit log why we set
   the kernel config as bool
- some tidying logic_pio code

Differences to v10:
- dropped CONFIG_LOGIC_PIO. Reason is that CONFIG_PCI
  depends on this, and CONFIG_PCI is a per-arch CONFIG.
  So we would require all arch's kconfig to select this.
- Addressed Dann Frazier's comments on LPC driver, and
  sopme other cleanup
- Moved logic_pio.h to be included in generic asm io.h
- Fixed ACPI indirect IO host setup to handle >1 child
- Relocated ACPI indirect IO host setup code to
  drivers/acpi
- Rebased to linux next-20180118

Changes from v9:
  - patch 2 has been split into 3 patches according to Bjorn comments on
v9 thread
  - patch 1 has been reworked accordign to Bjorn comments on v9
  - now logic_pio_trans_hwaddr() has a sanity check to make sure the resource
size fits into the assigned range
  - in patch 5 the MFD framework has been used to probe the LPC children
according to the suggestion from Mika Westerberg
  - Maintaner has changed to Huawei Linuxarm mailing list

Changes from v8:
  - Simplified LIB IO framewrok
  - Moved INDIRECT PIO ACPI framework under acpi/arm64
  - Renamed occurrences of "lib io" and "indirect io" to "lib pio" and
"indirect pio" to keep the patchset nomenclature consistent
  - Removed Alignment reuqirements
  - Moved LPC specific code out of ACPI common framework
  - Now PIO indirect HW ranges can overlap
  - Changed HiSilicon LPC driver maintainer (Gabriele Paoloni now) and split
maintaner file modifications in a separate commit
  - Removed the commit with the DT nodes support for hip06 and hip07 (to be
pushed separately)
  - Added a checking on ioport_map() not to break that function as Arnd points
out in V7 review thread;
  - fixed the compile issues on alpha, m68k;

Changes from V7:
  - Based on Arnd's comment, rename the LIBIO as LOGIC_PIO;
  - Improved the mapping process in LOGIC_PIO to gain better efficiency when
redirecting the I/O accesses to right device driver;
  - To reduce the impact on PCI MMIO to a minimum, add a new
CONFIG_INDIRECT_PIO for indirect-IO hosts/devices;
  - Added a new ACPI handler for indirect-IO hosts/devices;
  - Fixed the compile issues on V6;

Changes from V6:
  - According to the comments from Bjorn and Alex, merge PCI IO and indirect-IO
into a generic I/O space management, LIBIO;
  - Adopted the '_DEP' to replace the platform bus notifier. In this way, we can
ensure the LPC peripherals' I/O resources had been translated to logical IO
before the LPC peripheral 

[PATCH v13 0/9] LPC: legacy ISA I/O support

2018-02-13 Thread John Garry
This patchset supports the IPMI-bt device attached to the Low-Pin-Count
interface implemented on Hisilicon Hip06/Hip07 SoC.
---
| LPC host|
| |
---
 |
_V___LPC
  |   |
  V   V
 
 |  BT(ipmi)|
 

When master accesses those peripherals beneath the Hip06/Hip07 LPC, a specific
LPC driver is needed to make LPC host generate the standard LPC I/O cycles with
the target peripherals'I/O port addresses. But on curent arm64 world, there is
no real I/O accesses. All the I/O operations through in/out accessors are based
on MMIO ranges; on Hip06/Hip07 LPC the I/O accesses are performed through driver
specific accessors rather than MMIO.
To solve this issue and keep the relevant existing peripherals' drivers 
untouched,
this patchset:
   - introduces a generic I/O space management framework, LIBIO, to support I/O
 operations on host controllers operating either on MMIO buses or on buses
 requiring specific driver I/O accessors;
   - redefines the in/out accessors to provide a unified interface for both MMIO
 and driver specific I/O operations. Using LIBIO, th call of in/out() from
 the host children drivers, such as ipmi-si, will be redirected to the
 corresponding device-specific I/O hooks to perform the I/O accesses.

Based on this patch-set, all the I/O accesses to Hip06/Hip07 LPC peripherals can
be supported without any changes on the existing ipmi-si driver.

The whole patchset has been tested on Hip07 D05 board both using DTB and ACPI.

Differences to v12:
- Addressed ACPI comments from Rafael and Andy, including:
 - added SPDX license identifiers (other new files in the series got this 
also)
 - fixed style issues, like superflous newlines and symbol naming
 - add fuller acpi_indirectio.c patch commit message
 - dropped acpi_indirectio_host_data (author's decision) to simplify
- added Rob Herring's tag
- rebase to linux-next 20180212

Differences to v11:
- fixed build errors for i386, m68k, and tile
- added a comment in LPC driver commit log why we set
   the kernel config as bool
- some tidying logic_pio code

Differences to v10:
- dropped CONFIG_LOGIC_PIO. Reason is that CONFIG_PCI
  depends on this, and CONFIG_PCI is a per-arch CONFIG.
  So we would require all arch's kconfig to select this.
- Addressed Dann Frazier's comments on LPC driver, and
  sopme other cleanup
- Moved logic_pio.h to be included in generic asm io.h
- Fixed ACPI indirect IO host setup to handle >1 child
- Relocated ACPI indirect IO host setup code to
  drivers/acpi
- Rebased to linux next-20180118

Changes from v9:
  - patch 2 has been split into 3 patches according to Bjorn comments on
v9 thread
  - patch 1 has been reworked accordign to Bjorn comments on v9
  - now logic_pio_trans_hwaddr() has a sanity check to make sure the resource
size fits into the assigned range
  - in patch 5 the MFD framework has been used to probe the LPC children
according to the suggestion from Mika Westerberg
  - Maintaner has changed to Huawei Linuxarm mailing list

Changes from v8:
  - Simplified LIB IO framewrok
  - Moved INDIRECT PIO ACPI framework under acpi/arm64
  - Renamed occurrences of "lib io" and "indirect io" to "lib pio" and
"indirect pio" to keep the patchset nomenclature consistent
  - Removed Alignment reuqirements
  - Moved LPC specific code out of ACPI common framework
  - Now PIO indirect HW ranges can overlap
  - Changed HiSilicon LPC driver maintainer (Gabriele Paoloni now) and split
maintaner file modifications in a separate commit
  - Removed the commit with the DT nodes support for hip06 and hip07 (to be
pushed separately)
  - Added a checking on ioport_map() not to break that function as Arnd points
out in V7 review thread;
  - fixed the compile issues on alpha, m68k;

Changes from V7:
  - Based on Arnd's comment, rename the LIBIO as LOGIC_PIO;
  - Improved the mapping process in LOGIC_PIO to gain better efficiency when
redirecting the I/O accesses to right device driver;
  - To reduce the impact on PCI MMIO to a minimum, add a new
CONFIG_INDIRECT_PIO for indirect-IO hosts/devices;
  - Added a new ACPI handler for indirect-IO hosts/devices;
  - Fixed the compile issues on V6;

Changes from V6:
  - According to the comments from Bjorn and Alex, merge PCI IO and indirect-IO
into a generic I/O space management, LIBIO;
  - Adopted the '_DEP' to replace the platform bus notifier. In this way, we can
ensure the LPC peripherals' I/O resources had been translated to logical IO
before the LPC peripheral