1// SPDX-License-Identifier: GPL-2.0 2/* ICSSG Buffer queue helpers 3 * 4 * Copyright (C) 2021 Texas Instruments Incorporated - https://www.ti.com 5 */ 6 7#include <linux/regmap.h> 8#include "icssg_prueth.h" 9 10#define ICSSG_QUEUES_MAX 64 11#define ICSSG_QUEUE_OFFSET 0xd00 12#define ICSSG_QUEUE_PEEK_OFFSET 0xe00 13#define ICSSG_QUEUE_CNT_OFFSET 0xe40 14#define ICSSG_QUEUE_RESET_OFFSET 0xf40 15 16int icssg_queue_pop(struct prueth *prueth, u8 queue) 17{ 18 u32 val, cnt; 19 20 if (queue >= ICSSG_QUEUES_MAX) 21 return -EINVAL; 22 23 regmap_read(prueth->miig_rt, ICSSG_QUEUE_CNT_OFFSET + 4 * queue, &cnt); 24 if (!cnt) 25 return -EINVAL; 26 27 regmap_read(prueth->miig_rt, ICSSG_QUEUE_OFFSET + 4 * queue, &val); 28 29 return val; 30} 31 32void icssg_queue_push(struct prueth *prueth, int queue, u16 addr) 33{ 34 if (queue >= ICSSG_QUEUES_MAX) 35 return; 36 37 regmap_write(prueth->miig_rt, ICSSG_QUEUE_OFFSET + 4 * queue, addr); 38} 39 40u32 icssg_queue_level(struct prueth *prueth, int queue) 41{ 42 u32 reg; 43 44 if (queue >= ICSSG_QUEUES_MAX) 45 return 0; 46 47 regmap_read(prueth->miig_rt, ICSSG_QUEUE_CNT_OFFSET + 4 * queue, ®); 48 49 return reg; 50} 51