hw/nvram: Avoid unnecessary Xilinx eFuse backstore write
Add a check in the bit-set operation to write the backstore only if the affected bit is 0 before. With this in place, there will be no need for callers to do the checking in order to avoid unnecessary writes. Signed-off-by: Tong Ho <tong.ho@amd.com> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Reviewed-by: Francisco Iglesias <frasse.iglesias@gmail.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
e60a7d0d4d
commit
c2c1c4a35c
@ -143,6 +143,8 @@ static bool efuse_ro_bits_find(XlnxEFuse *s, uint32_t k)
|
||||
|
||||
bool xlnx_efuse_set_bit(XlnxEFuse *s, unsigned int bit)
|
||||
{
|
||||
uint32_t set, *row;
|
||||
|
||||
if (efuse_ro_bits_find(s, bit)) {
|
||||
g_autofree char *path = object_get_canonical_path(OBJECT(s));
|
||||
|
||||
@ -152,8 +154,13 @@ bool xlnx_efuse_set_bit(XlnxEFuse *s, unsigned int bit)
|
||||
return false;
|
||||
}
|
||||
|
||||
s->fuse32[bit / 32] |= 1 << (bit % 32);
|
||||
efuse_bdrv_sync(s, bit);
|
||||
/* Avoid back-end write unless there is a real update */
|
||||
row = &s->fuse32[bit / 32];
|
||||
set = 1 << (bit % 32);
|
||||
if (!(set & *row)) {
|
||||
*row |= set;
|
||||
efuse_bdrv_sync(s, bit);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user