[PATCH] drivers: pci: pcie_dw_common: add upper-limit to iATU
Ben Dooks
ben.dooks at sifive.com
Tue Oct 25 23:52:46 CEST 2022
On 20/10/2022 17:13, Bin Meng wrote:
> Hi Ben,
>
> On Thu, Oct 20, 2022 at 11:51 PM Ben Dooks <ben.dooks at sifive.com> wrote:
>>
>> The 4.6 spec added an upper 32bits to the ATU limit, and since this
>> driver is already assuming the unrolled feature added in the 4.8
>> specification this really should be set.
>>
>> This is causing a bug with testing against the QEMU model as it
>
> I guess you are testing QEMU sifive_u machine with some mods to add a
> DW PCIe controller, with U-Boot sifive_unmatched defconfig?
>
> Could you please document the QEMU command line in the commit message?
Your guess is wrong, I'm not currently using the sifive_u. This is a
test projec to test some of the work we've been doing updating the
dw-pcie code for future work.
I'll try and sort out adding this to the sifive_u as an option but I
expect that won't be until next week.
I am wondering whether to add a flag to say use viewport 2 for
the config, as logging from the dw-pcie model is showing a lot of
updates to windows setting, then restoring the IO view and I am
guessing people aren't configuring minimal settings on the Synopsys
designs...
>> defaults the viewports to fully open and not setting this causes
>> the config viewport to become most of memory (obviously stopping
>> the emulated system working correctly)
>>
>> Signed-off-by: Ben Dooks <ben.dooks at sifive.com>
>> ---
>> drivers/pci/pcie_dw_common.c | 2 ++
>> drivers/pci/pcie_dw_common.h | 1 +
>> 2 files changed, 3 insertions(+)
>>
>> diff --git a/drivers/pci/pcie_dw_common.c b/drivers/pci/pcie_dw_common.c
>> index e66fb1490a..9f8b016d11 100644
>> --- a/drivers/pci/pcie_dw_common.c
>> +++ b/drivers/pci/pcie_dw_common.c
>> @@ -73,6 +73,8 @@ int pcie_dw_prog_outbound_atu_unroll(struct pcie_dw *pci, int index,
>> upper_32_bits(cpu_addr));
>> dw_pcie_writel_ob_unroll(pci, index, PCIE_ATU_UNR_LIMIT,
>> lower_32_bits(cpu_addr + size - 1));
>> + dw_pcie_writel_ob_unroll(pci, index, PCIE_ATU_UNR_UPPER_LIMIT,
>> + upper_32_bits(cpu_addr + size - 1));
>> dw_pcie_writel_ob_unroll(pci, index, PCIE_ATU_UNR_LOWER_TARGET,
>> lower_32_bits(pci_addr));
>> dw_pcie_writel_ob_unroll(pci, index, PCIE_ATU_UNR_UPPER_TARGET,
>> diff --git a/drivers/pci/pcie_dw_common.h b/drivers/pci/pcie_dw_common.h
>> index 60bf966d5e..8ec6834fa1 100644
>> --- a/drivers/pci/pcie_dw_common.h
>> +++ b/drivers/pci/pcie_dw_common.h
>> @@ -32,6 +32,7 @@
>> #define PCIE_ATU_UNR_LIMIT 0x10
>> #define PCIE_ATU_UNR_LOWER_TARGET 0x14
>> #define PCIE_ATU_UNR_UPPER_TARGET 0x18
>> +#define PCIE_ATU_UNR_UPPER_LIMIT 0x20
>>
>> #define PCIE_ATU_REGION_INDEX2 (0x2 << 0)
>> #define PCIE_ATU_REGION_INDEX1 (0x1 << 0)
>> --
>
> Regards,
> Bin
More information about the U-Boot
mailing list