blob: 5b94beda0abab76b70eb325ca3dde231fb6c51c1 [file] [log] [blame]
Mario Sixf95104d2018-08-09 14:51:18 +02001/* SPDX-License-Identifier: GPL-2.0+ */
2/*
3 * (C) Copyright 2018
4 * Mario Six, Guntermann & Drunck GmbH, mario.six@gdsys.cc
5 */
6
7#ifndef __asm_axi_h
8#define __asm_axi_h
9
10#define axi_emul_get_ops(dev) ((struct axi_emul_ops *)(dev)->driver->ops)
11
12/**
13 * axi_sandbox_get_emul() - Retrieve a pointer to a AXI emulation device
14 * @bus: The AXI bus from which to retrieve a emulation device
15 * @address: The address of a transfer that should be handled by a emulation
16 * device
Heinrich Schuchardtcdf52c72023-05-10 11:59:20 +020017 * @size: A constant indicating the data width of the transfer that
18 * should be handled by an emulation device
Mario Sixf95104d2018-08-09 14:51:18 +020019 * @emulp: Pointer to a buffer receiving the emulation device that handles
20 * the transfer specified by the address and length parameters
21 *
22 * To test the AXI uclass, we implement a simple AXI emulation device, which is
23 * a virtual device on a AXI bus that exposes a simple storage interface: When
24 * reading and writing from the device, the addresses are translated to offsets
25 * within the device's storage. For write accesses the data is written to the
26 * specified storage offset, and for read accesses the data is read from the
27 * specified storage offset.
28 *
29 * A DTS entry might look like this:
30 *
31 * axi: axi@0 {
32 * compatible = "sandbox,axi";
33 * #address-cells = <0x1>;
34 * #size-cells = <0x1>;
35 * store@0 {
36 * compatible = "sandbox,sandbox_store";
37 * reg = <0x0 0x400>;
38 * };
39 * };
40 *
41 * This function may then be used to retrieve the pointer to the sandbox_store
42 * emulation device given the AXI bus device, and the data (address, data
43 * width) of a AXI transfer which should be handled by a emulation device.
44 *
45 * Return: 0 of OK, -ENODEV if no device capable of handling the specified
46 * transfer exists or the device could not be retrieved
47 */
Heinrich Schuchardtcdf52c72023-05-10 11:59:20 +020048int axi_sandbox_get_emul(struct udevice *bus, ulong address,
49 const enum axi_size_t size, struct udevice **emulp);
Mario Sixf95104d2018-08-09 14:51:18 +020050/**
51 * axi_get_store() - Get address of internal storage of a emulated AXI device
52 * @dev: Emulated AXI device to get the pointer of the internal storage
53 * for.
54 * @storep: Pointer to the internal storage of the emulated AXI device.
55 *
56 * To preset or read back the contents internal storage of the emulated AXI
57 * device, this function returns the pointer to the storage. Changes to the
58 * contents of the storage are reflected when using the AXI read/write API
59 * methods, and vice versa, so by using this method expected read data can be
60 * set up in advance, and written data can be checked in unit tests.
61 *
62 * Return: 0 if OK, -ve on error.
63 */
64int axi_get_store(struct udevice *dev, u8 **storep);
65
66#endif /* __asm_axi_h */