static int nfp_bpf_parse_cap_adjust_head(struct nfp_app_bpf *bpf, void __iomem *value, u32 length) { struct nfp_bpf_cap_tlv_adjust_head __iomem *cap = value; struct nfp_cpp *cpp = bpf->app->pf->cpp; if (length < sizeof(*cap)) { nfp_err(cpp, "truncated adjust_head TLV: %d\n", length); return -EINVAL; } bpf->adjust_head.flags = readl(&cap->flags); bpf->adjust_head.off_min = readl(&cap->off_min); bpf->adjust_head.off_max = readl(&cap->off_max); bpf->adjust_head.guaranteed_sub = readl(&cap->guaranteed_sub); bpf->adjust_head.guaranteed_add = readl(&cap->guaranteed_add); if (bpf->adjust_head.off_min > bpf->adjust_head.off_max) { nfp_err(cpp, "invalid adjust_head TLV: min > max\n"); return -EINVAL; } if (!FIELD_FIT(UR_REG_IMM_MAX, bpf->adjust_head.off_min) || !FIELD_FIT(UR_REG_IMM_MAX, bpf->adjust_head.off_max)) { nfp_warn(cpp, "disabling adjust_head - driver expects min/max to fit in as immediates\n"); memset(&bpf->adjust_head, 0, sizeof(bpf->adjust_head)); return 0; } return 0; }
static int aqr107_set_downshift(struct phy_device *phydev, u8 cnt) { int val = 0; if (!FIELD_FIT(MDIO_AN_VEND_PROV_DOWNSHIFT_MASK, cnt)) return -E2BIG; if (cnt != DOWNSHIFT_DEV_DISABLE) { val = MDIO_AN_VEND_PROV_DOWNSHIFT_EN; val |= FIELD_PREP(MDIO_AN_VEND_PROV_DOWNSHIFT_MASK, cnt); } return phy_modify_mmd(phydev, MDIO_MMD_AN, MDIO_AN_VEND_PROV, MDIO_AN_VEND_PROV_DOWNSHIFT_EN | MDIO_AN_VEND_PROV_DOWNSHIFT_MASK, val); }
static int sdhci_cdns_set_tune_val(struct sdhci_cdns_plat *plat, unsigned int val) { void __iomem *reg = plat->hrs_addr + SDHCI_CDNS_HRS06; u32 tmp; if (WARN_ON(!FIELD_FIT(SDHCI_CDNS_HRS06_TUNE, val))) return -EINVAL; tmp = readl(reg); tmp &= ~SDHCI_CDNS_HRS06_TUNE; tmp |= FIELD_PREP(SDHCI_CDNS_HRS06_TUNE, val); tmp |= SDHCI_CDNS_HRS06_TUNE_UP; writel(tmp, reg); return readl_poll_timeout(reg, tmp, !(tmp & SDHCI_CDNS_HRS06_TUNE_UP), 1); }