On 2017-10-28 03:10, Otavio Pontes wrote:
> Use the PCI mmconfig base address exported by jailhouse in boot
> parameters in order to access the memory mapped PCI configuration space.
> 
> Signed-off-by: Otavio Pontes <[email protected]>
> ---
>  arch/x86/include/asm/pci_x86.h |  2 ++
>  arch/x86/kernel/jailhouse.c    | 16 ++++++++++++++++
>  arch/x86/pci/mmconfig-shared.c |  4 ++--
>  3 files changed, 20 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/x86/include/asm/pci_x86.h b/arch/x86/include/asm/pci_x86.h
> index d08eacd298c2..114a39efb10c 100644
> --- a/arch/x86/include/asm/pci_x86.h
> +++ b/arch/x86/include/asm/pci_x86.h
> @@ -147,6 +147,8 @@ extern int pci_mmconfig_insert(struct device *dev, u16 
> seg, u8 start, u8 end,
>                              phys_addr_t addr);
>  extern int pci_mmconfig_delete(u16 seg, u8 start, u8 end);
>  extern struct pci_mmcfg_region *pci_mmconfig_lookup(int segment, int bus);
> +extern struct pci_mmcfg_region *__init pci_mmconfig_add(int segment, int 
> start,
> +                                                     int end, u64 addr);
>  
>  extern struct list_head pci_mmcfg_list;
>  
> diff --git a/arch/x86/kernel/jailhouse.c b/arch/x86/kernel/jailhouse.c
> index eedce3f921b4..70a7d7ab0549 100644
> --- a/arch/x86/kernel/jailhouse.c
> +++ b/arch/x86/kernel/jailhouse.c
> @@ -12,6 +12,7 @@
>  
>  #include <linux/acpi_pmtmr.h>
>  #include <linux/kernel.h>
> +#include <linux/pci.h>
>  #include <linux/serial_8250.h>
>  #include <asm/apic.h>
>  #include <asm/cpu.h>
> @@ -26,11 +27,14 @@
>   */
>  struct jailhouse_setup_data {
>       struct setup_data header;
> +     u64 pci_mmconfig_base;
>       u16 pm_timer_address;
>       u16 num_cpus;
>       u8 cpu_ids[255];
>  };
>  
> +static u64 pci_mmconfig_base;
> +
>  static uint32_t jailhouse_cpuid_base(void)
>  {
>       if (boot_cpu_data.cpuid_level < 0 ||
> @@ -130,6 +134,16 @@ static unsigned int x2apic_get_apic_id(unsigned long id)
>          return id;
>  }
>  
> +static int jailhouse_pci_init(void)
> +{
> +     if (pci_mmconfig_base) {
> +             pci_mmconfig_add(0, 0, 0xff, pci_mmconfig_base);
> +             pci_mmcfg_arch_init();
> +     }
> +
> +     return 0;
> +}
> +
>  static void __init jailhouse_init_platform(void)
>  {
>       /*
> @@ -149,6 +163,7 @@ static void __init jailhouse_init_platform(void)
>  
>       x86_init.timers.timer_init      = jailhouse_timer_init;
>       x86_init.irqs.pre_vector_init   = x86_init_noop;
> +     x86_init.pci.init               = jailhouse_pci_init;
>       legacy_pic                      = &null_legacy_pic;
>  
>       x86_platform.get_wallclock = jailhouse_get_wallclock;
> @@ -158,6 +173,7 @@ static void __init jailhouse_init_platform(void)
>       data = early_memremap(pa_data, sizeof(*data));
>       pmtmr_ioport = data->pm_timer_address;
>       printk(KERN_INFO "Jailhouse: PM-Timer IO Port: %#x\n", pmtmr_ioport);
> +     pci_mmconfig_base = data->pci_mmconfig_base;
>  
>       /*
>        * Register x2APIC handlers early. We need them when running
> diff --git a/arch/x86/pci/mmconfig-shared.c b/arch/x86/pci/mmconfig-shared.c
> index dd30b7e08bc2..53ce81d5126d 100644
> --- a/arch/x86/pci/mmconfig-shared.c
> +++ b/arch/x86/pci/mmconfig-shared.c
> @@ -93,8 +93,8 @@ static struct pci_mmcfg_region *pci_mmconfig_alloc(int 
> segment, int start,
>       return new;
>  }
>  
> -static struct pci_mmcfg_region *__init pci_mmconfig_add(int segment, int 
> start,
> -                                                     int end, u64 addr)
> +struct pci_mmcfg_region *__init pci_mmconfig_add(int segment, int start,
> +                                              int end, u64 addr)
>  {
>       struct pci_mmcfg_region *new;
>  
> 

Looks good. Will include this into my kernel queue once the comm region
change is in.

Jan
-- 
Siemens AG, Corporate Technology, CT RDA ITP SES-DE
Corporate Competence Center Embedded Linux

-- 
You received this message because you are subscribed to the Google Groups 
"Jailhouse" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to