162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Renesas RPC-IF core driver 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (C) 2018~2019 Renesas Solutions Corp. 662306a36Sopenharmony_ci * Copyright (C) 2019 Macronix International Co., Ltd. 762306a36Sopenharmony_ci * Copyright (C) 2019-2020 Cogent Embedded, Inc. 862306a36Sopenharmony_ci */ 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#ifndef __RENESAS_RPC_IF_H 1162306a36Sopenharmony_ci#define __RENESAS_RPC_IF_H 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci#include <linux/pm_runtime.h> 1462306a36Sopenharmony_ci#include <linux/types.h> 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_cienum rpcif_data_dir { 1762306a36Sopenharmony_ci RPCIF_NO_DATA, 1862306a36Sopenharmony_ci RPCIF_DATA_IN, 1962306a36Sopenharmony_ci RPCIF_DATA_OUT, 2062306a36Sopenharmony_ci}; 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_cistruct rpcif_op { 2362306a36Sopenharmony_ci struct { 2462306a36Sopenharmony_ci u8 buswidth; 2562306a36Sopenharmony_ci u8 opcode; 2662306a36Sopenharmony_ci bool ddr; 2762306a36Sopenharmony_ci } cmd, ocmd; 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci struct { 3062306a36Sopenharmony_ci u8 nbytes; 3162306a36Sopenharmony_ci u8 buswidth; 3262306a36Sopenharmony_ci bool ddr; 3362306a36Sopenharmony_ci u64 val; 3462306a36Sopenharmony_ci } addr; 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ci struct { 3762306a36Sopenharmony_ci u8 ncycles; 3862306a36Sopenharmony_ci u8 buswidth; 3962306a36Sopenharmony_ci } dummy; 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_ci struct { 4262306a36Sopenharmony_ci u8 nbytes; 4362306a36Sopenharmony_ci u8 buswidth; 4462306a36Sopenharmony_ci bool ddr; 4562306a36Sopenharmony_ci u32 val; 4662306a36Sopenharmony_ci } option; 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_ci struct { 4962306a36Sopenharmony_ci u8 buswidth; 5062306a36Sopenharmony_ci unsigned int nbytes; 5162306a36Sopenharmony_ci enum rpcif_data_dir dir; 5262306a36Sopenharmony_ci bool ddr; 5362306a36Sopenharmony_ci union { 5462306a36Sopenharmony_ci void *in; 5562306a36Sopenharmony_ci const void *out; 5662306a36Sopenharmony_ci } buf; 5762306a36Sopenharmony_ci } data; 5862306a36Sopenharmony_ci}; 5962306a36Sopenharmony_ci 6062306a36Sopenharmony_cienum rpcif_type { 6162306a36Sopenharmony_ci RPCIF_RCAR_GEN3, 6262306a36Sopenharmony_ci RPCIF_RCAR_GEN4, 6362306a36Sopenharmony_ci RPCIF_RZ_G2L, 6462306a36Sopenharmony_ci}; 6562306a36Sopenharmony_ci 6662306a36Sopenharmony_cistruct rpcif { 6762306a36Sopenharmony_ci struct device *dev; 6862306a36Sopenharmony_ci void __iomem *dirmap; 6962306a36Sopenharmony_ci size_t size; 7062306a36Sopenharmony_ci}; 7162306a36Sopenharmony_ci 7262306a36Sopenharmony_ciint rpcif_sw_init(struct rpcif *rpc, struct device *dev); 7362306a36Sopenharmony_ciint rpcif_hw_init(struct device *dev, bool hyperflash); 7462306a36Sopenharmony_civoid rpcif_prepare(struct device *dev, const struct rpcif_op *op, u64 *offs, 7562306a36Sopenharmony_ci size_t *len); 7662306a36Sopenharmony_ciint rpcif_manual_xfer(struct device *dev); 7762306a36Sopenharmony_cissize_t rpcif_dirmap_read(struct device *dev, u64 offs, size_t len, void *buf); 7862306a36Sopenharmony_ci 7962306a36Sopenharmony_ci#endif // __RENESAS_RPC_IF_H 80