On Thu, Oct 19, 2017 at 08:33:22AM +0530, Vinod Koul wrote:

> +static bool sdw_get_page(struct sdw_slave *slave, struct sdw_msg *msg)
> +{
> +     bool page = false, paging_support = false;
> +
> +     if (slave && slave->prop.paging_support)
> +             paging_support = true;
> +
> +     /*
> +      * Programme SCP page addr for:
> +      * 1. addr_page1 and addr_page2 contains non-zero values.
> +      * 2. Paging supported by Slave.
> +      */
> +     switch (msg->dev_num) {
> +     case SDW_ENUM_DEV_NUM:
> +     case SDW_BROADCAST_DEV_NUM:
> +             break;
> +
> +     default:
> +             if (paging_support && ((msg->addr_page1) || (msg->addr_page2)))
> +                     page = true;
> +     }
> +
> +     return page;

So if a page was specified but we don't have paging support we silently
just write to the base pagee?

> +int sdw_transfer(struct sdw_bus *bus, struct sdw_slave *slave,
> +                                     struct sdw_msg *msg)
> +{
> +     bool page;
> +     int ret;
> +
> +     mutex_lock(&bus->msg_lock);
> +
> +     page = sdw_get_page(slave, msg);

get_page() doesn't interact with the hardware at all so it could be
outside the lock.

> +     ret = do_transfer(bus, msg, page);
> +     if (ret != 0 && ret != -ENODATA) {
> +             dev_err(bus->dev, "trf on Slave %d failed:%d\n",
> +                             msg->dev_num, ret);
> +             goto error;
> +     }
> +
> +     if (page)
> +             ret = sdw_reset_page(bus, msg->dev_num);

Wouldn't it be safer to reset the page even on error so future messages
go to the right place if the paging bit of the failed operation worked?

> +int sdw_nread(struct sdw_slave *slave, u32 addr, size_t count, u8 *val)
> +{
> +     struct sdw_msg msg;
> +     int ret;
> +
> +     pm_runtime_get_sync(slave->bus->dev);

No error check.

> +     pm_runtime_get_sync(slave->bus->dev);
> +
> +     sdw_fill_msg(&msg, addr, count, slave->dev_num, SDW_MSG_FLAG_WRITE, 
> val);

The device doesn't need to be powered up for us to fill in the data
structures we're going to use.

Attachment: signature.asc
Description: PGP signature

Reply via email to