[SLOF] [PATCH] pci-scan: program 64-bit mem bar range in pci-bridge bar

Nikunj A Dadhania nikunj at linux.vnet.ibm.com
Fri Oct 9 17:02:49 AEDT 2015


Alexey Kardashevskiy <aik at ozlabs.ru> writes:

> On 10/08/2015 10:01 PM, Nikunj A Dadhania wrote:
>> If the devices beyond the bridge requests 64-bit mem
>> current code does not correctly program the bridge range properties.
>>
>> 64-bit prefetchable memory region is tracked by
>> pci-[next,max]-mem64. Use these to program the
>> pci bridge range registers.
>>
>> Signed-off-by: Nikunj A Dadhania <nikunj at linux.vnet.ibm.com>
>> ---
>>   slof/fs/pci-scan.fs | 19 +++++++++++++------
>>   1 file changed, 13 insertions(+), 6 deletions(-)
>>
>> diff --git a/slof/fs/pci-scan.fs b/slof/fs/pci-scan.fs
>> index b8b9fe6..0b221b6 100644
>> --- a/slof/fs/pci-scan.fs
>> +++ b/slof/fs/pci-scan.fs
>> @@ -110,10 +110,13 @@ here 100 allot CONSTANT pci-device-vec
>>           dup 100000 + pci-next-mem !             \ and write back with 1MB for bridge
>>           over 24 + rtas-config-w@                \ check if 64bit support
>>           1 and IF                                \ IF 64 bit support
>> -                2dup 20 rshift                  \ | keep upper 32 bits
>> -                swap 28 + rtas-config-l!        \ | and write it into the Base-Upper32-bits
>> -                pci-max-mem @ 20 rshift         \ | fetch max Limit address and keep upper 32 bits
>> -                2 pick 2C + rtas-config-l!      \ | and set the Limit
>> +                pci-next-mem64 @ 100000000 #aligned \ | read the current Value of 64-bit and align to 1GB boundary
>
>
> 100000000 != 1GB, it is 4GB. Or you want it to be 1GB, if so, then
> why?

code is correct, comment is wrong, should be 4GB in comment ;-)

Will send an updated patch.

>
>
>> +                dup 100000000 + pci-next-mem64 x!   \ | and write back with 1GB for bridge
>> +                2 pick swap                         \ |
>> +                20 rshift                           \ | keep upper 32 bits
>> +                swap 28 + rtas-config-l!            \ | and write it into the Base-Upper32-bits
>> +                pci-max-mem64 @ 20 rshift           \ | fetch max Limit address and keep upper 32 bits
>> +                2 pick 2C + rtas-config-l!          \ | and set the Limit
>>           THEN                                    \ FI
>>           10 rshift                               \ keep upper 16 bits
>>           pci-max-mem @ 1- FFFF0000 and or        \ and Insert mmem Limit (set it to max)
>> @@ -129,8 +132,12 @@ here 100 allot CONSTANT pci-device-vec
>>           1-                                      \ make limit one less than boundary
>>           over 24 + rtas-config-w@                \ check if 64bit support
>>           1 and IF                                \ IF 64 bit support
>> -                2dup 20 rshift                  \ | keep upper 32 bits
>> -                swap 2C + rtas-config-l!        \ | and write it into the Limit-Upper32-bits
>> +                pci-next-mem64 @ 100000000 #aligned \ | Reat current value of 64-bar and align at 1GB
>> +                dup pci-next-mem64 x!               \ | and write it back
>> +                1-                                  \ | make limite one less than boundary
>> +                2 pick swap                         \ |
>> +                20 rshift                           \ | keep upper 32 bits
>> +                swap 2C + rtas-config-l!            \ | and write it into the Limit-Upper32-bits
>>           THEN                                    \ FI
>>           FFFF0000 and                            \ keep upper 16 bits
>>           over 24 + rtas-config-l@ 0000FFFF and   \ fetch original Value
>>
>
>
> -- 
> Alexey

Regards
Nikunj



More information about the SLOF mailing list