[Skiboot] [PATCH] phb4: Fix TVE encoding for start address

Alistair Popple alistair at popple.id.au
Fri Feb 3 14:34:52 AEDT 2017


Do we also need the same fix to hw/phb3.c and hw/npu.c?

I haven't tested this but it looks reasonable. If I'm not mistaken the
old behaviour would have allowed a PCIe device to access addresses
below it's allocated PCIe bus address so this just increases
protection by further restricting device access.

Reviewed-By: Alistair Popple <alistair at popple.id.au>

On Tue, 3 Jan 2017 06:38:22 PM Frederic Barrat wrote:
> From the phb4 spec, when encoding the TVE, the pci start address bits
> 49:24 are encoded in bits TVE[52:53]||[0:23].
> The mask to select bits 47:24 is incorrectly set. It should be
> 0xffffff000000, shifted left by 16, i.e. 0xffffff << 40
>
> Signed-off-by: Frederic Barrat <fbarrat at linux.vnet.ibm.com>
> ---
> Already discussed with Benh
>
>  hw/phb4.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/hw/phb4.c b/hw/phb4.c
> index b2723ca..c2c7cc7 100644
> --- a/hw/phb4.c
> +++ b/hw/phb4.c
> @@ -1345,7 +1345,7 @@ static int64_t phb4_map_pe_dma_window_real(struct phb *phb,
>  		 * and end address bits 49:24 into TVE[54:55]||[24:47]
>  		 * and set TVE[51]
>  		 */
> -		tve  = (pci_start_addr << 16) & (0xffffffull << 48);
> +		tve  = (pci_start_addr << 16) & (0xffffffull << 40);
>  		tve |= (pci_start_addr >> 38) & (3ull << 10);
>  		tve |= (end >>  8) & (0xfffffful << 16);
>  		tve |= (end >> 40) & (3ull << 8);
>



More information about the Skiboot mailing list