mcap: linux: Add support for multiple bitstreams

This patch adds support for configuring
a partial clear file followed by a partial bit file.
(Ex: ./mcap -x 0x8038 -C partialclear.bit -p partial.bit)

Signed-off-by: Kedareswara rao Appana <appanad@xilinx.com>
Reviewed-by: Srikanth Vemula <svemula@xilinx.com>
This commit is contained in:
Kedareswara rao Appana 2015-05-27 18:35:37 +05:30 committed by Nava kishore Manne
parent 03d6ee77cf
commit 04f84f637b
3 changed files with 30 additions and 10 deletions

View file

@ -151,12 +151,20 @@ int main(int argc, char **argv)
}
if (programconfigfile) {
if (argc > 6)
mdev->is_multiplebit = 1;
MCapConfigureFPGA(mdev, argv[4], EMCAP_PARTIALCONFIG_FILE);
goto free;
if(!mdev->is_multiplebit)
goto free;
}
if (program) {
MCapConfigureFPGA(mdev, argv[4], EMCAP_CONFIG_FILE);
if (argc > 6)
MCapConfigureFPGA(mdev, argv[6], EMCAP_CONFIG_FILE);
else
MCapConfigureFPGA(mdev, argv[4], EMCAP_CONFIG_FILE);
goto free;
}

View file

@ -276,6 +276,13 @@ static int MCapWritePartialBitStream(struct mcap_dev *mdev, u32 *data,
return -EMCAPWRITE;
}
if (!mdev->is_multiplebit) {
pr_info("Info: A partial reconfiguration clear file (-C) was");
pr_info(" loaded without a partial reconfiguration file (-p)");
pr_info(" as result the MCAP Control register was not restored");
pr_info(" to its original value\n\r");
}
return 0;
}
@ -301,16 +308,18 @@ static int MCapWriteBitStream(struct mcap_dev *mdev, u32 *data,
return -EMCAPWRITE;
}
/* Set 'Mode', 'In Use by PCIe' and 'Data Reg Protect' bits */
set = MCapRegRead(mdev, MCAP_CONTROL);
set |= MCAP_CTRL_MODE_MASK | MCAP_CTRL_IN_USE_MASK |
MCAP_CTRL_DATA_REG_PROT_MASK;
if (!mdev->is_multiplebit) {
/* Set 'Mode', 'In Use by PCIe' and 'Data Reg Protect' bits */
set = MCapRegRead(mdev, MCAP_CONTROL);
set |= MCAP_CTRL_MODE_MASK | MCAP_CTRL_IN_USE_MASK |
MCAP_CTRL_DATA_REG_PROT_MASK;
/* Clear 'Reset', 'Module Reset' and 'Register Read' bits */
set &= ~(MCAP_CTRL_RESET_MASK | MCAP_CTRL_MOD_RESET_MASK |
MCAP_CTRL_REG_READ_MASK | MCAP_CTRL_DESIGN_SWITCH_MASK);
/* Clear 'Reset', 'Module Reset' and 'Register Read' bits */
set &= ~(MCAP_CTRL_RESET_MASK | MCAP_CTRL_MOD_RESET_MASK |
MCAP_CTRL_REG_READ_MASK | MCAP_CTRL_DESIGN_SWITCH_MASK);
MCapRegWrite(mdev, MCAP_CONTROL, set);
MCapRegWrite(mdev, MCAP_CONTROL, set);
}
/* Write Data */
if (!bswap) {
@ -361,6 +370,8 @@ struct mcap_dev *MCapLibInit(int device_id)
/* Get the pci_access structure */
mdev->pacc = pci_alloc();
mdev->is_multiplebit = 0;
/* Initialize the PCI library */
pci_init(mdev->pacc);

View file

@ -115,6 +115,7 @@ struct mcap_dev {
struct pci_dev *pdev;
struct pci_access *pacc;
unsigned int reg_base;
u32 is_multiplebit;
};
#define MCapRegWrite(mdev, offset, value) \