Merge tag 'trace-printf-v6.13' of git://git.kernel.org/pub/scm/linux/kernel/git/trace...
[drm/drm-misc.git] / drivers / bus / stm32_firewall.h
blobe5fac85fe3460be4a725c9a084c08d8ed1acd674
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3 * Copyright (C) 2023, STMicroelectronics - All Rights Reserved
4 */
6 #ifndef _STM32_FIREWALL_H
7 #define _STM32_FIREWALL_H
9 #include <linux/kernel.h>
10 #include <linux/list.h>
11 #include <linux/of.h>
12 #include <linux/platform_device.h>
13 #include <linux/types.h>
15 /**
16 * STM32_PERIPHERAL_FIREWALL: This type of firewall protects peripherals
17 * STM32_MEMORY_FIREWALL: This type of firewall protects memories/subsets of memory
18 * zones
19 * STM32_NOTYPE_FIREWALL: Undefined firewall type
22 #define STM32_PERIPHERAL_FIREWALL BIT(1)
23 #define STM32_MEMORY_FIREWALL BIT(2)
24 #define STM32_NOTYPE_FIREWALL BIT(3)
26 /**
27 * struct stm32_firewall_controller - Information on firewall controller supplying services
29 * @name: Name of the firewall controller
30 * @dev: Device reference of the firewall controller
31 * @mmio: Base address of the firewall controller
32 * @entry: List entry of the firewall controller list
33 * @type: Type of firewall
34 * @max_entries: Number of entries covered by the firewall
35 * @grant_access: Callback used to grant access for a device access against a
36 * firewall controller
37 * @release_access: Callback used to release resources taken by a device when access was
38 * granted
39 * @grant_memory_range_access: Callback used to grant access for a device to a given memory region
41 struct stm32_firewall_controller {
42 const char *name;
43 struct device *dev;
44 void __iomem *mmio;
45 struct list_head entry;
46 unsigned int type;
47 unsigned int max_entries;
49 int (*grant_access)(struct stm32_firewall_controller *ctrl, u32 id);
50 void (*release_access)(struct stm32_firewall_controller *ctrl, u32 id);
51 int (*grant_memory_range_access)(struct stm32_firewall_controller *ctrl, phys_addr_t paddr,
52 size_t size);
55 /**
56 * stm32_firewall_controller_register - Register a firewall controller to the STM32 firewall
57 * framework
58 * @firewall_controller: Firewall controller to register
60 * Returns 0 in case of success or -ENODEV if no controller was given.
62 int stm32_firewall_controller_register(struct stm32_firewall_controller *firewall_controller);
64 /**
65 * stm32_firewall_controller_unregister - Unregister a firewall controller from the STM32
66 * firewall framework
67 * @firewall_controller: Firewall controller to unregister
69 void stm32_firewall_controller_unregister(struct stm32_firewall_controller *firewall_controller);
71 /**
72 * stm32_firewall_populate_bus - Populate device tree nodes that have a correct firewall
73 * configuration. This is used at boot-time only, as a sanity check
74 * between device tree and firewalls hardware configurations to
75 * prevent a kernel crash when a device driver is not granted access
77 * @firewall_controller: Firewall controller which nodes will be populated or not
79 * Returns 0 in case of success or appropriate errno code if error occurred.
81 int stm32_firewall_populate_bus(struct stm32_firewall_controller *firewall_controller);
83 #endif /* _STM32_FIREWALL_H */