* [PATCH] hvmloader: don't treat ROM BAR like other BARs
@ 2015-03-20 15:20 Jan Beulich
2015-03-23 19:35 ` Konrad Rzeszutek Wilk
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Jan Beulich @ 2015-03-20 15:20 UTC (permalink / raw)
To: xen-devel; +Cc: Andrew Cooper, Keir Fraser
[-- Attachment #1: Type: text/plain, Size: 2589 bytes --]
Its low 11 bits have different meaning.
Signed-off-by: Jan Beulich <jbeulich@suse.com>
--- a/tools/firmware/hvmloader/pci.c
+++ b/tools/firmware/hvmloader/pci.c
@@ -179,18 +179,31 @@ void pci_setup(void)
bar_reg = PCI_ROM_ADDRESS;
bar_data = pci_readl(devfn, bar_reg);
- is_64bar = !!((bar_data & (PCI_BASE_ADDRESS_SPACE |
- PCI_BASE_ADDRESS_MEM_TYPE_MASK)) ==
- (PCI_BASE_ADDRESS_SPACE_MEMORY |
- PCI_BASE_ADDRESS_MEM_TYPE_64));
- pci_writel(devfn, bar_reg, ~0);
+ if ( bar_reg != PCI_ROM_ADDRESS )
+ {
+ is_64bar = !!((bar_data & (PCI_BASE_ADDRESS_SPACE |
+ PCI_BASE_ADDRESS_MEM_TYPE_MASK)) ==
+ (PCI_BASE_ADDRESS_SPACE_MEMORY |
+ PCI_BASE_ADDRESS_MEM_TYPE_64));
+ pci_writel(devfn, bar_reg, ~0);
+ }
+ else
+ {
+ is_64bar = 0;
+ pci_writel(devfn, bar_reg,
+ (bar_data | PCI_ROM_ADDRESS_MASK) &
+ ~PCI_ROM_ADDRESS_ENABLE);
+ }
bar_sz = pci_readl(devfn, bar_reg);
pci_writel(devfn, bar_reg, bar_data);
- bar_sz &= (((bar_data & PCI_BASE_ADDRESS_SPACE) ==
- PCI_BASE_ADDRESS_SPACE_MEMORY) ?
- PCI_BASE_ADDRESS_MEM_MASK :
- (PCI_BASE_ADDRESS_IO_MASK & 0xffff));
+ if ( bar_reg != PCI_ROM_ADDRESS )
+ bar_sz &= (((bar_data & PCI_BASE_ADDRESS_SPACE) ==
+ PCI_BASE_ADDRESS_SPACE_MEMORY) ?
+ PCI_BASE_ADDRESS_MEM_MASK :
+ (PCI_BASE_ADDRESS_IO_MASK & 0xffff));
+ else
+ bar_sz &= PCI_ROM_ADDRESS_MASK;
if (is_64bar) {
bar_data_upper = pci_readl(devfn, bar_reg + 4);
pci_writel(devfn, bar_reg + 4, ~0);
@@ -214,8 +227,9 @@ void pci_setup(void)
bars[i].bar_reg = bar_reg;
bars[i].bar_sz = bar_sz;
- if ( (bar_data & PCI_BASE_ADDRESS_SPACE) ==
- PCI_BASE_ADDRESS_SPACE_MEMORY )
+ if ( ((bar_data & PCI_BASE_ADDRESS_SPACE) ==
+ PCI_BASE_ADDRESS_SPACE_MEMORY) ||
+ (bar_reg == PCI_ROM_ADDRESS) )
mmio_total += bar_sz;
nr_bars++;
[-- Attachment #2: hvmloader-ROM-BAR-sizing.patch --]
[-- Type: text/plain, Size: 2633 bytes --]
hvmloader: don't treat ROM BAR like other BARs
Its low 11 bits have different meaning.
Signed-off-by: Jan Beulich <jbeulich@suse.com>
--- a/tools/firmware/hvmloader/pci.c
+++ b/tools/firmware/hvmloader/pci.c
@@ -179,18 +179,31 @@ void pci_setup(void)
bar_reg = PCI_ROM_ADDRESS;
bar_data = pci_readl(devfn, bar_reg);
- is_64bar = !!((bar_data & (PCI_BASE_ADDRESS_SPACE |
- PCI_BASE_ADDRESS_MEM_TYPE_MASK)) ==
- (PCI_BASE_ADDRESS_SPACE_MEMORY |
- PCI_BASE_ADDRESS_MEM_TYPE_64));
- pci_writel(devfn, bar_reg, ~0);
+ if ( bar_reg != PCI_ROM_ADDRESS )
+ {
+ is_64bar = !!((bar_data & (PCI_BASE_ADDRESS_SPACE |
+ PCI_BASE_ADDRESS_MEM_TYPE_MASK)) ==
+ (PCI_BASE_ADDRESS_SPACE_MEMORY |
+ PCI_BASE_ADDRESS_MEM_TYPE_64));
+ pci_writel(devfn, bar_reg, ~0);
+ }
+ else
+ {
+ is_64bar = 0;
+ pci_writel(devfn, bar_reg,
+ (bar_data | PCI_ROM_ADDRESS_MASK) &
+ ~PCI_ROM_ADDRESS_ENABLE);
+ }
bar_sz = pci_readl(devfn, bar_reg);
pci_writel(devfn, bar_reg, bar_data);
- bar_sz &= (((bar_data & PCI_BASE_ADDRESS_SPACE) ==
- PCI_BASE_ADDRESS_SPACE_MEMORY) ?
- PCI_BASE_ADDRESS_MEM_MASK :
- (PCI_BASE_ADDRESS_IO_MASK & 0xffff));
+ if ( bar_reg != PCI_ROM_ADDRESS )
+ bar_sz &= (((bar_data & PCI_BASE_ADDRESS_SPACE) ==
+ PCI_BASE_ADDRESS_SPACE_MEMORY) ?
+ PCI_BASE_ADDRESS_MEM_MASK :
+ (PCI_BASE_ADDRESS_IO_MASK & 0xffff));
+ else
+ bar_sz &= PCI_ROM_ADDRESS_MASK;
if (is_64bar) {
bar_data_upper = pci_readl(devfn, bar_reg + 4);
pci_writel(devfn, bar_reg + 4, ~0);
@@ -214,8 +227,9 @@ void pci_setup(void)
bars[i].bar_reg = bar_reg;
bars[i].bar_sz = bar_sz;
- if ( (bar_data & PCI_BASE_ADDRESS_SPACE) ==
- PCI_BASE_ADDRESS_SPACE_MEMORY )
+ if ( ((bar_data & PCI_BASE_ADDRESS_SPACE) ==
+ PCI_BASE_ADDRESS_SPACE_MEMORY) ||
+ (bar_reg == PCI_ROM_ADDRESS) )
mmio_total += bar_sz;
nr_bars++;
[-- Attachment #3: Type: text/plain, Size: 126 bytes --]
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] hvmloader: don't treat ROM BAR like other BARs
2015-03-20 15:20 [PATCH] hvmloader: don't treat ROM BAR like other BARs Jan Beulich
@ 2015-03-23 19:35 ` Konrad Rzeszutek Wilk
2015-03-24 14:26 ` Ian Campbell
2015-03-25 16:40 ` Andrew Cooper
2 siblings, 0 replies; 4+ messages in thread
From: Konrad Rzeszutek Wilk @ 2015-03-23 19:35 UTC (permalink / raw)
To: Jan Beulich; +Cc: xen-devel, Keir Fraser, Andrew Cooper
On Fri, Mar 20, 2015 at 03:20:16PM +0000, Jan Beulich wrote:
> Its low 11 bits have different meaning.
>
> Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
>
> --- a/tools/firmware/hvmloader/pci.c
> +++ b/tools/firmware/hvmloader/pci.c
> @@ -179,18 +179,31 @@ void pci_setup(void)
> bar_reg = PCI_ROM_ADDRESS;
>
> bar_data = pci_readl(devfn, bar_reg);
> - is_64bar = !!((bar_data & (PCI_BASE_ADDRESS_SPACE |
> - PCI_BASE_ADDRESS_MEM_TYPE_MASK)) ==
> - (PCI_BASE_ADDRESS_SPACE_MEMORY |
> - PCI_BASE_ADDRESS_MEM_TYPE_64));
> - pci_writel(devfn, bar_reg, ~0);
> + if ( bar_reg != PCI_ROM_ADDRESS )
> + {
> + is_64bar = !!((bar_data & (PCI_BASE_ADDRESS_SPACE |
> + PCI_BASE_ADDRESS_MEM_TYPE_MASK)) ==
> + (PCI_BASE_ADDRESS_SPACE_MEMORY |
> + PCI_BASE_ADDRESS_MEM_TYPE_64));
> + pci_writel(devfn, bar_reg, ~0);
> + }
> + else
> + {
> + is_64bar = 0;
> + pci_writel(devfn, bar_reg,
> + (bar_data | PCI_ROM_ADDRESS_MASK) &
> + ~PCI_ROM_ADDRESS_ENABLE);
> + }
> bar_sz = pci_readl(devfn, bar_reg);
> pci_writel(devfn, bar_reg, bar_data);
>
> - bar_sz &= (((bar_data & PCI_BASE_ADDRESS_SPACE) ==
> - PCI_BASE_ADDRESS_SPACE_MEMORY) ?
> - PCI_BASE_ADDRESS_MEM_MASK :
> - (PCI_BASE_ADDRESS_IO_MASK & 0xffff));
> + if ( bar_reg != PCI_ROM_ADDRESS )
> + bar_sz &= (((bar_data & PCI_BASE_ADDRESS_SPACE) ==
> + PCI_BASE_ADDRESS_SPACE_MEMORY) ?
> + PCI_BASE_ADDRESS_MEM_MASK :
> + (PCI_BASE_ADDRESS_IO_MASK & 0xffff));
> + else
> + bar_sz &= PCI_ROM_ADDRESS_MASK;
> if (is_64bar) {
> bar_data_upper = pci_readl(devfn, bar_reg + 4);
> pci_writel(devfn, bar_reg + 4, ~0);
> @@ -214,8 +227,9 @@ void pci_setup(void)
> bars[i].bar_reg = bar_reg;
> bars[i].bar_sz = bar_sz;
>
> - if ( (bar_data & PCI_BASE_ADDRESS_SPACE) ==
> - PCI_BASE_ADDRESS_SPACE_MEMORY )
> + if ( ((bar_data & PCI_BASE_ADDRESS_SPACE) ==
> + PCI_BASE_ADDRESS_SPACE_MEMORY) ||
> + (bar_reg == PCI_ROM_ADDRESS) )
> mmio_total += bar_sz;
>
> nr_bars++;
>
>
>
> hvmloader: don't treat ROM BAR like other BARs
>
> Its low 11 bits have different meaning.
>
> Signed-off-by: Jan Beulich <jbeulich@suse.com>
>
> --- a/tools/firmware/hvmloader/pci.c
> +++ b/tools/firmware/hvmloader/pci.c
> @@ -179,18 +179,31 @@ void pci_setup(void)
> bar_reg = PCI_ROM_ADDRESS;
>
> bar_data = pci_readl(devfn, bar_reg);
> - is_64bar = !!((bar_data & (PCI_BASE_ADDRESS_SPACE |
> - PCI_BASE_ADDRESS_MEM_TYPE_MASK)) ==
> - (PCI_BASE_ADDRESS_SPACE_MEMORY |
> - PCI_BASE_ADDRESS_MEM_TYPE_64));
> - pci_writel(devfn, bar_reg, ~0);
> + if ( bar_reg != PCI_ROM_ADDRESS )
> + {
> + is_64bar = !!((bar_data & (PCI_BASE_ADDRESS_SPACE |
> + PCI_BASE_ADDRESS_MEM_TYPE_MASK)) ==
> + (PCI_BASE_ADDRESS_SPACE_MEMORY |
> + PCI_BASE_ADDRESS_MEM_TYPE_64));
> + pci_writel(devfn, bar_reg, ~0);
> + }
> + else
> + {
> + is_64bar = 0;
> + pci_writel(devfn, bar_reg,
> + (bar_data | PCI_ROM_ADDRESS_MASK) &
> + ~PCI_ROM_ADDRESS_ENABLE);
> + }
> bar_sz = pci_readl(devfn, bar_reg);
> pci_writel(devfn, bar_reg, bar_data);
>
> - bar_sz &= (((bar_data & PCI_BASE_ADDRESS_SPACE) ==
> - PCI_BASE_ADDRESS_SPACE_MEMORY) ?
> - PCI_BASE_ADDRESS_MEM_MASK :
> - (PCI_BASE_ADDRESS_IO_MASK & 0xffff));
> + if ( bar_reg != PCI_ROM_ADDRESS )
> + bar_sz &= (((bar_data & PCI_BASE_ADDRESS_SPACE) ==
> + PCI_BASE_ADDRESS_SPACE_MEMORY) ?
> + PCI_BASE_ADDRESS_MEM_MASK :
> + (PCI_BASE_ADDRESS_IO_MASK & 0xffff));
> + else
> + bar_sz &= PCI_ROM_ADDRESS_MASK;
> if (is_64bar) {
> bar_data_upper = pci_readl(devfn, bar_reg + 4);
> pci_writel(devfn, bar_reg + 4, ~0);
> @@ -214,8 +227,9 @@ void pci_setup(void)
> bars[i].bar_reg = bar_reg;
> bars[i].bar_sz = bar_sz;
>
> - if ( (bar_data & PCI_BASE_ADDRESS_SPACE) ==
> - PCI_BASE_ADDRESS_SPACE_MEMORY )
> + if ( ((bar_data & PCI_BASE_ADDRESS_SPACE) ==
> + PCI_BASE_ADDRESS_SPACE_MEMORY) ||
> + (bar_reg == PCI_ROM_ADDRESS) )
> mmio_total += bar_sz;
>
> nr_bars++;
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xen.org
> http://lists.xen.org/xen-devel
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] hvmloader: don't treat ROM BAR like other BARs
2015-03-20 15:20 [PATCH] hvmloader: don't treat ROM BAR like other BARs Jan Beulich
2015-03-23 19:35 ` Konrad Rzeszutek Wilk
@ 2015-03-24 14:26 ` Ian Campbell
2015-03-25 16:40 ` Andrew Cooper
2 siblings, 0 replies; 4+ messages in thread
From: Ian Campbell @ 2015-03-24 14:26 UTC (permalink / raw)
To: Jan Beulich; +Cc: xen-devel, Keir Fraser, Andrew Cooper
On Fri, 2015-03-20 at 15:20 +0000, Jan Beulich wrote:
> Its low 11 bits have different meaning.
>
> Signed-off-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] hvmloader: don't treat ROM BAR like other BARs
2015-03-20 15:20 [PATCH] hvmloader: don't treat ROM BAR like other BARs Jan Beulich
2015-03-23 19:35 ` Konrad Rzeszutek Wilk
2015-03-24 14:26 ` Ian Campbell
@ 2015-03-25 16:40 ` Andrew Cooper
2 siblings, 0 replies; 4+ messages in thread
From: Andrew Cooper @ 2015-03-25 16:40 UTC (permalink / raw)
To: Jan Beulich, xen-devel; +Cc: Keir Fraser
On 20/03/15 16:20, Jan Beulich wrote:
> Its low 11 bits have different meaning.
>
> Signed-off-by: Jan Beulich<jbeulich@suse.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2015-03-25 16:40 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-03-20 15:20 [PATCH] hvmloader: don't treat ROM BAR like other BARs Jan Beulich
2015-03-23 19:35 ` Konrad Rzeszutek Wilk
2015-03-24 14:26 ` Ian Campbell
2015-03-25 16:40 ` Andrew Cooper
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.