hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/drivers/mtd/nand/raw/brcmnand/brcmnand.h
....@@ -1,14 +1,6 @@
1
+/* SPDX-License-Identifier: GPL-2.0-only */
12 /*
23 * Copyright © 2015 Broadcom Corporation
3
- *
4
- * This program is free software; you can redistribute it and/or modify
5
- * it under the terms of the GNU General Public License version 2 as
6
- * published by the Free Software Foundation.
7
- *
8
- * This program is distributed in the hope that it will be useful,
9
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
10
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
- * GNU General Public License for more details.
124 */
135
146 #ifndef __BRCMNAND_H__
....@@ -19,12 +11,25 @@
1911
2012 struct platform_device;
2113 struct dev_pm_ops;
14
+struct brcmnand_io_ops;
15
+
16
+/* Special register offset constant to intercept a non-MMIO access
17
+ * to the flash cache register space. This is intentionally large
18
+ * not to overlap with an existing offset.
19
+ */
20
+#define BRCMNAND_NON_MMIO_FC_ADDR 0xffffffff
2221
2322 struct brcmnand_soc {
2423 bool (*ctlrdy_ack)(struct brcmnand_soc *soc);
2524 void (*ctlrdy_set_enabled)(struct brcmnand_soc *soc, bool en);
2625 void (*prepare_data_bus)(struct brcmnand_soc *soc, bool prepare,
2726 bool is_param);
27
+ const struct brcmnand_io_ops *ops;
28
+};
29
+
30
+struct brcmnand_io_ops {
31
+ u32 (*read_reg)(struct brcmnand_soc *soc, u32 offset);
32
+ void (*write_reg)(struct brcmnand_soc *soc, u32 val, u32 offset);
2833 };
2934
3035 static inline void brcmnand_soc_data_bus_prepare(struct brcmnand_soc *soc,
....@@ -66,6 +71,22 @@
6671 writel_relaxed(val, addr);
6772 }
6873
74
+static inline bool brcmnand_soc_has_ops(struct brcmnand_soc *soc)
75
+{
76
+ return soc && soc->ops && soc->ops->read_reg && soc->ops->write_reg;
77
+}
78
+
79
+static inline u32 brcmnand_soc_read(struct brcmnand_soc *soc, u32 offset)
80
+{
81
+ return soc->ops->read_reg(soc, offset);
82
+}
83
+
84
+static inline void brcmnand_soc_write(struct brcmnand_soc *soc, u32 val,
85
+ u32 offset)
86
+{
87
+ soc->ops->write_reg(soc, val, offset);
88
+}
89
+
6990 int brcmnand_probe(struct platform_device *pdev, struct brcmnand_soc *soc);
7091 int brcmnand_remove(struct platform_device *pdev);
7192