[PATCH linux dev-4.7 v2 6/7] drivers/fsi: Cleanup bus errors
Jeremy Kerr
jk at ozlabs.org
Thu Feb 23 08:55:29 AEDT 2017
Hi Chris,
> @@ -255,6 +263,10 @@ int hub_master_break(struct fsi_master *master, int linkno)
> uint32_t break_offset = 0x4; /* hw workaround */
> uint32_t addr;
>
> + /* config table lists 2 entries per hub link */
> + if (linkno >= (master->n_links / 2))
> + return -ENODEV;
> +
master->n_links should represent the actual number of links, rather than
reflect what's in the config table.
[besides, don't we do the / 2 during the config table parse anyway?]
> command = FSI_BREAK;
> addr = (linkno * FSI_MASTER_HUB_LINK_SIZE) + hub->base;
> return fsi_slave_write(hub->slave, addr + break_offset, &command,
> @@ -641,6 +653,28 @@ static int fsi_master_break(struct fsi_master *master, int link)
>
> void fsi_master_handle_error(struct fsi_master *master, uint32_t addr)
> {
> + uint32_t smode = FSI_SLAVE_SMODE_DFLT;
> +
> + /* Avoid nested error handling */
> + if (test_and_set_bit(FSI_IN_ERR_CLEANUP, &fsi_state))
> + return;
Do we have any other bits of state to represent? If not, just use a
plain atomic_t rather than a set of flags.
Cheers,
Jeremy
More information about the openbmc
mailing list