Commit | Line | Data |
---|---|---|
ca7d8b98 SS |
1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | /* | |
3 | * Renesas RPC-IF core driver | |
4 | * | |
5 | * Copyright (C) 2018~2019 Renesas Solutions Corp. | |
6 | * Copyright (C) 2019 Macronix International Co., Ltd. | |
7 | * Copyright (C) 2019-2020 Cogent Embedded, Inc. | |
8 | */ | |
9 | ||
10 | #ifndef __RENESAS_RPC_IF_H | |
11 | #define __RENESAS_RPC_IF_H | |
12 | ||
7889a7da | 13 | #include <linux/pm_runtime.h> |
ca7d8b98 SS |
14 | #include <linux/types.h> |
15 | ||
16 | enum rpcif_data_dir { | |
17 | RPCIF_NO_DATA, | |
18 | RPCIF_DATA_IN, | |
19 | RPCIF_DATA_OUT, | |
20 | }; | |
21 | ||
8c84a733 | 22 | struct rpcif_op { |
ca7d8b98 SS |
23 | struct { |
24 | u8 buswidth; | |
25 | u8 opcode; | |
26 | bool ddr; | |
27 | } cmd, ocmd; | |
28 | ||
29 | struct { | |
30 | u8 nbytes; | |
31 | u8 buswidth; | |
32 | bool ddr; | |
33 | u64 val; | |
34 | } addr; | |
35 | ||
36 | struct { | |
37 | u8 ncycles; | |
38 | u8 buswidth; | |
39 | } dummy; | |
40 | ||
41 | struct { | |
42 | u8 nbytes; | |
43 | u8 buswidth; | |
44 | bool ddr; | |
45 | u32 val; | |
46 | } option; | |
47 | ||
48 | struct { | |
49 | u8 buswidth; | |
50 | unsigned int nbytes; | |
51 | enum rpcif_data_dir dir; | |
52 | bool ddr; | |
53 | union { | |
54 | void *in; | |
55 | const void *out; | |
56 | } buf; | |
57 | } data; | |
58 | }; | |
59 | ||
b04cc0d9 LP |
60 | enum rpcif_type { |
61 | RPCIF_RCAR_GEN3, | |
1de3866f | 62 | RPCIF_RCAR_GEN4, |
b04cc0d9 LP |
63 | RPCIF_RZ_G2L, |
64 | }; | |
65 | ||
8c84a733 | 66 | struct rpcif { |
ca7d8b98 SS |
67 | struct device *dev; |
68 | void __iomem *dirmap; | |
ca7d8b98 | 69 | size_t size; |
ca7d8b98 SS |
70 | }; |
71 | ||
8c84a733 | 72 | int rpcif_sw_init(struct rpcif *rpc, struct device *dev); |
a198fcd1 GU |
73 | int rpcif_hw_init(struct device *dev, bool hyperflash); |
74 | void rpcif_prepare(struct device *dev, const struct rpcif_op *op, u64 *offs, | |
ca7d8b98 | 75 | size_t *len); |
a198fcd1 GU |
76 | int rpcif_manual_xfer(struct device *dev); |
77 | ssize_t rpcif_dirmap_read(struct device *dev, u64 offs, size_t len, void *buf); | |
ca7d8b98 SS |
78 | |
79 | #endif // __RENESAS_RPC_IF_H |