IB/hfi1: Fix dc8051 multiple qword memory reads

When reading multiple dc8051 data memory locations
at once, the read enabled field must be toggled
at every address change.  Do that by writing only
the address first, then writing the enable.

Reviewed-by: Ira Weiny <ira.weiny@intel.com>
Reviewed-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: Dean Luick <dean.luick@intel.com>
Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
Dean Luick 2016-12-07 19:32:22 -08:00 коммит произвёл Doug Ledford
Родитель 62aeddbf28
Коммит d7cf4ccf6f
1 изменённых файлов: 6 добавлений и 4 удалений

Просмотреть файл

@ -263,11 +263,13 @@ static int __read_8051_data(struct hfi1_devdata *dd, u32 addr, u64 *result)
u64 reg; u64 reg;
int count; int count;
/* start the read at the given address */ /* step 1: set the address, clear enable */
reg = ((addr & DC_DC8051_CFG_RAM_ACCESS_CTRL_ADDRESS_MASK) reg = (addr & DC_DC8051_CFG_RAM_ACCESS_CTRL_ADDRESS_MASK)
<< DC_DC8051_CFG_RAM_ACCESS_CTRL_ADDRESS_SHIFT) << DC_DC8051_CFG_RAM_ACCESS_CTRL_ADDRESS_SHIFT;
| DC_DC8051_CFG_RAM_ACCESS_CTRL_READ_ENA_SMASK;
write_csr(dd, DC_DC8051_CFG_RAM_ACCESS_CTRL, reg); write_csr(dd, DC_DC8051_CFG_RAM_ACCESS_CTRL, reg);
/* step 2: enable */
write_csr(dd, DC_DC8051_CFG_RAM_ACCESS_CTRL,
reg | DC_DC8051_CFG_RAM_ACCESS_CTRL_READ_ENA_SMASK);
/* wait until ACCESS_COMPLETED is set */ /* wait until ACCESS_COMPLETED is set */
count = 0; count = 0;