On Mon, 2022-02-07 at 16:54 -0800, David E. Box wrote: > Intel Software Defined Silicon (SDSi) is a post manufacturing mechanism for > activating additional silicon features. Features are enabled through a > license activation process. The SDSi driver provides a per socket, sysfs > attribute interface for applications to perform 3 main provisioning > functions: [] > --- > V6 > - Replace, > return (ret < 0) ? ret : size; > with, > if (ret) > return ret; > return size > > Besides the style change (suggested by GKH) this fixes a klocwork > warning. thanks. > diff --git a/drivers/platform/x86/intel/sdsi.c b/drivers/platform/x86/intel/sdsi.c [] > +/* SDSi mailbox operations must be performed using 64bit mov instructions */ > +static __always_inline void > +sdsi_memcpy64_toio(u64 __iomem *to, const u64 *from, size_t count_bytes) > +{ > + size_t count = count_bytes / sizeof(*to); > + int i; > + > + for (i = 0; i < count; i++) > + writeq(from[i], &to[i]); Any chance the byte count is not a multiple of sizeof(u64) ? > +static __always_inline void > +sdsi_memcpy64_fromio(u64 *to, const u64 __iomem *from, size_t count_bytes) > +{ > + size_t count = count_bytes / sizeof(*to); > + int i; > + > + for (i = 0; i < count; i++) > + to[i] = readq(&from[i]); > +} here too. [] > +static int sdsi_mbox_cmd_read(struct sdsi_priv *priv, struct sdsi_mbox_info *info, > + size_t *data_size) > +{ > + struct device *dev = priv->dev; > + u32 total, loop, eom, status, message_size; [] > + if (packet_size > SDSI_SIZE_MAILBOX) { > + dev_err(dev, "Packet size to large\n"); too [] > + /* Message size check is only valid for multi-packet transfers */ > + if (loop && total != message_size) > + dev_warn(dev, "Read count %d differs from expected count %d\n", %u > + total, message_size); > +static int sdsi_map_mbox_registers(struct sdsi_priv *priv, struct pci_dev *parent, > + struct disc_table *disc_table, struct resource *disc_res) > +{ > + u32 access_type = FIELD_GET(DT_ACCESS_TYPE, disc_table->access_info); > + u32 size = FIELD_GET(DT_SIZE, disc_table->access_info); > + u32 tbir = FIELD_GET(DT_TBIR, disc_table->offset); > + u32 offset = DT_OFFSET(disc_table->offset); > + u32 features_offset; > + struct resource res = {}; > + > + /* Starting location of SDSi MMIO region based on access type */ > + switch (access_type) { > + case ACCESS_TYPE_LOCAL: > + if (tbir) { > + dev_err(priv->dev, "Unsupported BAR index %d for access type %d\n", > + tbir, access_type); %u here too [] > + dev_err(priv->dev, "Unrecognized access_type %d\n", access_type); and here