static void noc_set_qos_priority(struct msm_bus_noc_info *ninfo, uint32_t mport, struct msm_bus_noc_qos_priority *priority) { uint32_t reg_val, val; reg_val = readl_relaxed(NOC_QOS_PRIORITYn_ADDR(ninfo->base, ninfo->qos_baseoffset, mport)) & NOC_QOS_PRIORITYn_RMSK; val = priority->p1 << NOC_QOS_PRIORITYn_P1_SHFT; writel_relaxed(((reg_val & (~(NOC_QOS_PRIORITYn_P1_BMSK))) | (val & NOC_QOS_PRIORITYn_P1_BMSK)), NOC_QOS_PRIORITYn_ADDR(ninfo->base, ninfo->qos_baseoffset, mport)); reg_val = readl_relaxed(NOC_QOS_PRIORITYn_ADDR(ninfo->base, ninfo->qos_baseoffset, mport)) & NOC_QOS_PRIORITYn_RMSK; writel_relaxed(((reg_val & (~(NOC_QOS_PRIORITYn_P0_BMSK))) | (priority->p0 & NOC_QOS_PRIORITYn_P0_BMSK)), NOC_QOS_PRIORITYn_ADDR(ninfo->base, ninfo->qos_baseoffset, mport)); /* Ensure qos priority is set before exiting */ wmb(); }
static void noc_set_qos_priority(void __iomem *base, uint32_t qos_off, uint32_t mport, uint32_t qos_delta, struct msm_bus_noc_qos_priority *priority) { uint32_t reg_val, val; reg_val = readl_relaxed(NOC_QOS_PRIORITYn_ADDR(base, qos_off, mport, qos_delta)) & NOC_QOS_PRIORITYn_RMSK; val = priority->p1 << NOC_QOS_PRIORITYn_P1_SHFT; writel_relaxed(((reg_val & (~(NOC_QOS_PRIORITYn_P1_BMSK))) | (val & NOC_QOS_PRIORITYn_P1_BMSK)), NOC_QOS_PRIORITYn_ADDR(base, qos_off, mport, qos_delta)); reg_val = readl_relaxed(NOC_QOS_PRIORITYn_ADDR(base, qos_off, mport, qos_delta)) & NOC_QOS_PRIORITYn_RMSK; writel_relaxed(((reg_val & (~(NOC_QOS_PRIORITYn_P0_BMSK))) | (priority->p0 & NOC_QOS_PRIORITYn_P0_BMSK)), NOC_QOS_PRIORITYn_ADDR(base, qos_off, mport, qos_delta)); /* Ensure qos priority is set before exiting */ wmb(); }
uint8_t msm_bus_noc_get_qos_mode(struct msm_bus_noc_info *ninfo, uint32_t mport, uint32_t mode, uint32_t perm_mode) { if (NOC_QOS_MODES_ALL_PERM == perm_mode) return readl_relaxed(NOC_QOS_MODEn_ADDR(ninfo->base, mport)) & NOC_QOS_MODEn_MODE_BMSK; else return 31 - __CLZ(mode & NOC_QOS_MODES_ALL_PERM); } void msm_bus_noc_get_qos_priority(struct msm_bus_noc_info *ninfo, uint32_t mport, struct msm_bus_noc_qos_priority *priority) { priority->p1 = (readl_relaxed(NOC_QOS_PRIORITYn_ADDR(ninfo->base, mport)) & NOC_QOS_PRIORITYn_P1_BMSK) >> NOC_QOS_PRIORITYn_P1_SHFT; priority->p0 = (readl_relaxed(NOC_QOS_PRIORITYn_ADDR(ninfo->base, mport)) & NOC_QOS_PRIORITYn_P0_BMSK) >> NOC_QOS_PRIORITYn_P0_SHFT; } void msm_bus_noc_get_qos_bw(struct msm_bus_noc_info *ninfo, uint32_t mport, uint8_t perm_mode, struct msm_bus_noc_qos_bw *qbw) { if (perm_mode & (NOC_QOS_PERM_MODE_LIMITER | NOC_QOS_PERM_MODE_REGULATOR)) { uint32_t bw_val = readl_relaxed(NOC_QOS_BWn_ADDR(ninfo-> base, mport)) & NOC_QOS_BWn_BW_BMSK; uint32_t sat = readl_relaxed(NOC_QOS_SATn_ADDR(ninfo->
uint8_t msm_bus_noc_get_qos_mode(void __iomem *base, uint32_t qos_off, uint32_t mport, uint32_t qos_delta, uint32_t mode, uint32_t perm_mode) { if (NOC_QOS_MODES_ALL_PERM == perm_mode) return readl_relaxed(NOC_QOS_MODEn_ADDR(base, qos_off, mport, qos_delta)) & NOC_QOS_MODEn_MODE_BMSK; else return 31 - __CLZ(mode & NOC_QOS_MODES_ALL_PERM); } void msm_bus_noc_get_qos_priority(void __iomem *base, uint32_t qos_off, uint32_t mport, uint32_t qos_delta, struct msm_bus_noc_qos_priority *priority) { priority->p1 = (readl_relaxed(NOC_QOS_PRIORITYn_ADDR(base, qos_off, mport, qos_delta)) & NOC_QOS_PRIORITYn_P1_BMSK) >> NOC_QOS_PRIORITYn_P1_SHFT; priority->p0 = (readl_relaxed(NOC_QOS_PRIORITYn_ADDR(base, qos_off, mport, qos_delta)) & NOC_QOS_PRIORITYn_P0_BMSK) >> NOC_QOS_PRIORITYn_P0_SHFT; } void msm_bus_noc_get_qos_bw(void __iomem *base, uint32_t qos_off, uint32_t qos_freq, uint32_t mport, uint32_t qos_delta, uint8_t perm_mode, struct msm_bus_noc_qos_bw *qbw) { if (perm_mode & (NOC_QOS_PERM_MODE_LIMITER | NOC_QOS_PERM_MODE_REGULATOR)) { uint32_t bw_val = readl_relaxed(NOC_QOS_BWn_ADDR(