Zhichang Yuan
031e360186
lib: Add generic PIO mapping method
...
41f8bba7f555 ("of/pci: Add pci_register_io_range() and
pci_pio_to_address()") added support for PCI I/O space mapped into CPU
physical memory space. With that support, the I/O ranges configured for
PCI/PCIe hosts on some architectures can be mapped to logical PIO and
converted easily between CPU address and the corresponding logical PIO.
Based on this, PCI I/O port space can be accessed via in/out accessors that
use memory read/write.
But on some platforms, there are bus hosts that access I/O port space with
host-local I/O port addresses rather than memory addresses.
Add a more generic I/O mapping method to support those devices. With this
patch, both the CPU addresses and the host-local port can be mapped into
the logical PIO space with different logical/fake PIOs. After this, all
the I/O accesses to either PCI MMIO devices or host-local I/O peripherals
can be unified into the existing I/O accessors defined in asm-generic/io.h
and be redirected to the right device-specific hooks based on the input
logical PIO.
Tested-by: dann frazier <dann.frazier@canonical.com>
Signed-off-by: Zhichang Yuan <yuanzhichang@hisilicon.com>
Signed-off-by: Gabriele Paoloni <gabriele.paoloni@huawei.com>
Signed-off-by: John Garry <john.garry@huawei.com>
[bhelgaas: remove -EFAULT return from logic_pio_register_range() per
https://lkml.kernel.org/r/20180403143909.GA21171@ulmo , fix NULL pointer
checking per https://lkml.kernel.org/r/20180403211505.GA29612@embeddedor.com ]
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
2018-03-21 17:18:34 -05:00
..
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-10-03 17:54:25 -07:00
2017-11-02 11:10:55 +01:00
2017-12-22 19:39:09 +11:00
2017-11-02 11:10:55 +01:00
2017-10-12 15:10:12 +02:00
2015-09-10 13:29:01 -07:00
2017-05-08 17:15:12 -07:00
2017-08-15 09:02:08 -07:00
2017-11-02 11:10:55 +01:00
2017-12-01 13:09:40 -08:00
2017-12-01 13:09:40 -08:00
2017-12-08 15:13:27 +00:00
2017-12-04 10:52:56 -08:00
2017-07-14 15:05:13 -07:00
locking/atomic: Implement atomic{,64,_long}_fetch_{add,sub,and,andnot,or,xor}{,_relaxed,_acquire,_release}()
2016-06-16 10:48:32 +02:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2018-02-06 18:32:44 -08:00
2017-07-10 16:32:35 -07:00
2015-11-23 09:44:58 +01:00
2017-12-11 09:58:39 -05:00
2017-11-17 16:10:01 -08:00
2017-11-02 11:10:55 +01:00
2018-01-12 23:03:01 +11:00
2017-11-02 11:10:55 +01:00
2016-03-13 23:55:13 -04:00
2017-11-02 11:10:55 +01:00
2017-09-08 18:26:49 -07:00
2017-12-01 13:09:40 -08:00
2017-11-02 11:10:55 +01:00
2018-02-06 18:32:44 -08:00
2017-09-26 15:01:20 -06:00
2017-09-26 15:01:20 -06:00
2017-09-26 15:01:20 -06:00
2017-11-02 11:10:55 +01:00
2017-02-24 17:46:57 -08:00
2018-01-08 10:08:33 +00:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-08-14 16:51:01 +02:00
2017-11-02 11:10:55 +01:00
2015-09-10 13:29:01 -07:00
2017-11-02 11:10:55 +01:00
2017-02-24 17:46:57 -08:00
2015-09-10 13:29:01 -07:00
2015-09-10 13:29:01 -07:00
2015-09-10 13:29:01 -07:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-10-12 17:16:40 +01:00
2017-11-13 08:25:06 -08:00
2017-11-17 16:10:00 -08:00
2018-01-15 09:35:15 +01:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-11-17 16:10:01 -08:00
2017-11-15 11:56:19 -08:00
2016-06-08 11:04:19 +02:00
2018-01-12 17:33:38 -08:00
2018-01-01 12:40:27 -07:00
2017-07-10 16:32:35 -07:00
2017-08-10 15:54:06 -07:00
2018-02-06 18:32:44 -08:00
2018-02-06 18:32:44 -08:00
2017-11-02 11:10:55 +01:00
2017-10-07 10:45:14 -06:00
2017-11-02 11:10:55 +01:00
2017-11-17 16:10:02 -08:00
2017-02-24 17:46:57 -08:00
2017-02-24 17:46:57 -08:00
2017-09-08 18:26:49 -07:00
2017-11-02 11:10:55 +01:00
2018-02-06 16:41:29 -05:00
2017-11-02 11:10:55 +01:00
2017-11-17 16:10:01 -08:00
2017-11-17 16:10:02 -08:00
2016-01-20 17:09:18 -08:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-11-02 10:04:46 -07:00
2017-10-11 22:36:54 -04:00
2017-11-02 11:10:55 +01:00
2017-03-02 08:42:38 +01:00
2017-11-02 11:10:55 +01:00
2018-03-21 17:18:34 -05:00
2018-02-09 19:32:41 -08:00
2018-02-06 18:32:47 -08:00
2017-05-16 08:44:22 -03:00
2016-12-14 16:04:08 -08:00
2016-02-07 22:18:47 -08:00
2018-01-02 14:56:51 +01:00
2018-02-01 10:00:28 -08:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-06-08 17:36:03 +08:00
2017-02-24 17:46:56 -08:00
2017-11-02 11:10:55 +01:00
2017-10-25 11:01:08 +02:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2018-03-21 17:18:34 -05:00
2015-11-25 09:22:02 -07:00
2017-12-01 13:09:40 -08:00
2018-03-21 17:18:34 -05:00
2017-11-02 11:10:55 +01:00
2017-12-01 13:09:40 -08:00
2017-11-02 11:10:55 +01:00
2015-12-03 11:49:23 -05:00
2017-12-07 14:00:57 -05:00
2017-11-17 16:10:02 -08:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-12-08 15:13:28 +00:00
2017-11-04 09:26:51 +09:00
2017-02-03 16:35:42 -05:00
2016-12-06 10:17:03 +02:00
2018-01-26 11:45:16 -06:00
2017-11-02 11:10:55 +01:00
2017-03-02 08:42:34 +01:00
2017-12-04 10:52:53 -08:00
2017-03-02 08:42:27 +01:00
2017-01-23 09:17:12 +01:00
2018-02-06 16:41:28 -05:00
2017-11-21 15:57:05 -08:00
2017-10-03 17:54:26 -07:00
2017-11-02 11:10:55 +01:00
2017-11-17 16:10:02 -08:00
2017-12-14 16:00:48 -08:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-12-11 09:58:39 -05:00
2017-12-22 11:09:37 -07:00
2018-01-19 12:31:03 -07:00
2017-11-02 11:10:55 +01:00
2016-04-15 16:53:14 -04:00
2017-11-02 11:10:55 +01:00
2017-02-22 16:41:30 -08:00
2017-01-09 13:58:57 -05:00
2018-01-05 15:24:00 +01:00
2017-11-02 11:10:55 +01:00
2018-02-06 18:32:44 -08:00
2017-09-13 18:53:16 -07:00
2018-02-01 12:20:21 -08:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2018-01-15 09:35:50 +01:00
2017-11-02 11:10:55 +01:00
2018-02-06 18:32:44 -08:00
2018-02-05 00:31:57 +01:00
2017-09-08 18:26:49 -07:00
2018-01-22 16:55:38 +01:00
2016-09-01 17:52:01 -07:00
2016-01-20 17:09:18 -08:00
2018-02-06 18:32:43 -08:00
2018-01-09 16:33:31 +01:00
2017-11-17 16:10:01 -08:00
2017-02-26 11:03:38 -05:00
2017-11-29 12:09:02 +11:00
2017-12-11 09:58:38 -05:00
2017-01-09 13:58:57 -05:00
2018-02-06 18:32:45 -08:00
2016-02-09 10:27:29 +01:00
2017-11-17 16:10:01 -08:00
2017-07-12 16:26:00 -07:00
2017-05-01 09:36:30 +02:00
2017-07-21 09:38:30 +02:00
2015-09-10 13:29:01 -07:00
2016-02-03 08:28:43 -08:00
2017-12-29 23:13:10 +01:00
2017-10-22 03:14:07 +01:00
2017-10-22 03:14:07 +01:00
2018-02-06 18:32:46 -08:00
2018-02-06 18:32:46 -08:00
2017-12-01 13:09:40 -08:00
2017-11-02 11:10:55 +01:00
2017-12-11 09:35:11 -05:00
2017-12-11 15:03:08 -07:00
2018-02-01 13:36:15 -08:00
2017-11-02 11:10:55 +01:00
2017-08-15 09:02:07 -07:00