18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * The On Chip Memory (OCMEM) allocator allows various clients to allocate 48c2ecf20Sopenharmony_ci * memory from OCMEM based on performance, latency and power requirements. 58c2ecf20Sopenharmony_ci * This is typically used by the GPU, camera/video, and audio components on 68c2ecf20Sopenharmony_ci * some Snapdragon SoCs. 78c2ecf20Sopenharmony_ci * 88c2ecf20Sopenharmony_ci * Copyright (C) 2019 Brian Masney <masneyb@onstation.org> 98c2ecf20Sopenharmony_ci * Copyright (C) 2015 Red Hat. Author: Rob Clark <robdclark@gmail.com> 108c2ecf20Sopenharmony_ci */ 118c2ecf20Sopenharmony_ci 128c2ecf20Sopenharmony_ci#include <linux/device.h> 138c2ecf20Sopenharmony_ci#include <linux/err.h> 148c2ecf20Sopenharmony_ci 158c2ecf20Sopenharmony_ci#ifndef __OCMEM_H__ 168c2ecf20Sopenharmony_ci#define __OCMEM_H__ 178c2ecf20Sopenharmony_ci 188c2ecf20Sopenharmony_cienum ocmem_client { 198c2ecf20Sopenharmony_ci /* GMEM clients */ 208c2ecf20Sopenharmony_ci OCMEM_GRAPHICS = 0x0, 218c2ecf20Sopenharmony_ci /* 228c2ecf20Sopenharmony_ci * TODO add more once ocmem_allocate() is clever enough to 238c2ecf20Sopenharmony_ci * deal with multiple clients. 248c2ecf20Sopenharmony_ci */ 258c2ecf20Sopenharmony_ci OCMEM_CLIENT_MAX, 268c2ecf20Sopenharmony_ci}; 278c2ecf20Sopenharmony_ci 288c2ecf20Sopenharmony_cistruct ocmem; 298c2ecf20Sopenharmony_ci 308c2ecf20Sopenharmony_cistruct ocmem_buf { 318c2ecf20Sopenharmony_ci unsigned long offset; 328c2ecf20Sopenharmony_ci unsigned long addr; 338c2ecf20Sopenharmony_ci unsigned long len; 348c2ecf20Sopenharmony_ci}; 358c2ecf20Sopenharmony_ci 368c2ecf20Sopenharmony_ci#if IS_ENABLED(CONFIG_QCOM_OCMEM) 378c2ecf20Sopenharmony_ci 388c2ecf20Sopenharmony_cistruct ocmem *of_get_ocmem(struct device *dev); 398c2ecf20Sopenharmony_cistruct ocmem_buf *ocmem_allocate(struct ocmem *ocmem, enum ocmem_client client, 408c2ecf20Sopenharmony_ci unsigned long size); 418c2ecf20Sopenharmony_civoid ocmem_free(struct ocmem *ocmem, enum ocmem_client client, 428c2ecf20Sopenharmony_ci struct ocmem_buf *buf); 438c2ecf20Sopenharmony_ci 448c2ecf20Sopenharmony_ci#else /* IS_ENABLED(CONFIG_QCOM_OCMEM) */ 458c2ecf20Sopenharmony_ci 468c2ecf20Sopenharmony_cistatic inline struct ocmem *of_get_ocmem(struct device *dev) 478c2ecf20Sopenharmony_ci{ 488c2ecf20Sopenharmony_ci return ERR_PTR(-ENODEV); 498c2ecf20Sopenharmony_ci} 508c2ecf20Sopenharmony_ci 518c2ecf20Sopenharmony_cistatic inline struct ocmem_buf *ocmem_allocate(struct ocmem *ocmem, 528c2ecf20Sopenharmony_ci enum ocmem_client client, 538c2ecf20Sopenharmony_ci unsigned long size) 548c2ecf20Sopenharmony_ci{ 558c2ecf20Sopenharmony_ci return ERR_PTR(-ENODEV); 568c2ecf20Sopenharmony_ci} 578c2ecf20Sopenharmony_ci 588c2ecf20Sopenharmony_cistatic inline void ocmem_free(struct ocmem *ocmem, enum ocmem_client client, 598c2ecf20Sopenharmony_ci struct ocmem_buf *buf) 608c2ecf20Sopenharmony_ci{ 618c2ecf20Sopenharmony_ci} 628c2ecf20Sopenharmony_ci 638c2ecf20Sopenharmony_ci#endif /* IS_ENABLED(CONFIG_QCOM_OCMEM) */ 648c2ecf20Sopenharmony_ci 658c2ecf20Sopenharmony_ci#endif /* __OCMEM_H__ */ 66