1 /*        $NetBSD: rmixl_firmware.h,v 1.4 2020/05/14 08:34:20 msaitoh Exp $     */
2 
3 /*-
4  * Copyright (c) 2009 The NetBSD Foundation, Inc.
5  * All rights reserved.
6  *
7  * This code is derived from software contributed to The NetBSD Foundation
8  * by Cliff Neighbors
9  *
10  * Redistribution and use in source and binary forms, with or without
11  * modification, are permitted provided that the following conditions
12  * are met:
13  * 1. Redistributions of source code must retain the above copyright
14  *    notice, this list of conditions and the following disclaimer.
15  * 2. Redistributions in binary form must reproduce the above copyright
16  *    notice, this list of conditions and the following disclaimer in the
17  *    documentation and/or other materials provided with the distribution.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
20  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29  * POSSIBILITY OF SUCH DAMAGE.
30  */
31 
32 /*********************************************************************
33 
34   Copyright 2003-2006 Raza Microelectronics, Inc. (RMI). All rights
35   reserved.
36 
37   Redistribution and use in source and binary forms, with or without
38   modification, are permitted provided that the following conditions
39   are met:
40 
41   1. Redistributions of source code must retain the above copyright
42   notice, this list of conditions and the following disclaimer.
43   2. Redistributions in binary form must reproduce the above copyright
44   notice, this list of conditions and the following disclaimer in
45   the documentation and/or other materials provided with the
46   distribution.
47 
48   THIS SOFTWARE IS PROVIDED BY Raza Microelectronics, Inc. ``AS IS'' AND
49   ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
50   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
51   PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL RMI OR CONTRIBUTORS BE LIABLE
52   FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
53   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
54   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
55   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
56   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
57   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
58   THE POSSIBILITY OF SUCH DAMAGE.
59 
60   *****************************#RMI_2#**********************************/
61 
62 #ifndef _ARCH_MIPS_RMI_RMIXL_FIRMWARE_H_
63 #define _ARCH_MIPS_RMI_RMIXL_FIRMWARE_H_
64 
65 typedef struct rmixlfw_info {
66           uint64_t boot_level;
67           uint64_t io_base;
68           uint64_t output_device;
69           uint64_t uart_print;
70           uint64_t led_output;
71           uint64_t init;
72           uint64_t exit;
73           uint64_t warm_reset;
74           uint64_t wakeup;
75           uint64_t cpu_online_map;
76           uint64_t master_reentry_sp;
77           uint64_t master_reentry_gp;
78           uint64_t master_reentry_fn;
79           uint64_t slave_reentry_fn;
80           uint64_t magic_dword;
81           uint64_t uart_putchar;
82           uint64_t size;
83           uint64_t uart_getchar;
84           uint64_t nmi_handler;
85           uint64_t psb_version;
86           uint64_t mac_addr;
87           uint64_t cpu_frequency;
88           uint64_t board_version;
89           uint64_t malloc;
90           uint64_t free;
91           uint64_t global_shmem_addr;
92           uint64_t global_shmem_size;
93           uint64_t psb_os_cpu_map;
94           uint64_t userapp_cpu_map;
95           uint64_t wakeup_os;
96           uint64_t psb_mem_map;
97           uint64_t board_major_version;
98           uint64_t board_minor_version;
99           uint64_t board_manf_revision;
100           uint64_t board_serial_number;
101           uint64_t psb_physaddr_map;
102           uint64_t xlr_loaderip_config;
103           uint64_t bldr_envp;
104           uint64_t avail_mem_map;
105 } rmixlfw_info_t;
106 
107 
108 #define RMIXLFW_MMAP_MAX_MMAPS                    32
109 
110 #define RMIXLFW_MMAP_TYPE_RAM           1
111 #define RMIXLFW_MMAP_TYPE_ROM           2
112 #define RMIXLFW_MMAP_TYPE_RESERVED      3
113 #define RMIXLFW_MMAP_TYPE_DEV_IO        0x10
114 #define RMIXLFW_MMAP_TYPE_PCI_IO        0x11
115 #define RMIXLFW_MMAP_TYPE_PCI_CFG       0x12
116 #define RMIXLFW_MMAP_TYPE_PCI_MEM       0x13
117 #define RMIXLFW_MMAP_TYPE_UNKNOWN       0xff
118 
119 /*
120  * struct at psb_mem_map, psb_physaddr_map, avail_mem_map
121  */
122 typedef struct rmixlfw_mmap {
123           uint32_t nmmaps;
124           struct rmixlfw_mmap_entry {
125                     uint64_t start;
126                     uint64_t size;
127                     uint32_t type;
128           } entry[RMIXLFW_MMAP_MAX_MMAPS];
129 } rmixlfw_mmap_t;
130 
131 #define XLR_ARGV_BUF_SIZE     256
132 #define XLR_ENV_BUF_SIZE      256
133 #define XLR_MAX_ARGV                    32
134 #define XLR_MAX_ENV           32
135 #define MAX_ELF_SEGMENTS      16
136 #define MAX_TLB_MAPPINGS      16
137 
138 struct lib_cpu_tlb_mapping {
139           int page_size;
140           int asid;
141           int coherency;
142           int attr;
143           uint32_t virt;
144           uint64_t phys;
145 };
146 
147 struct core_segment_info
148 {
149           uint64_t vaddr;
150           uint64_t memsz;
151           uint32_t flags;
152 };
153 
154 typedef struct rmixlfw_cpu_wakeup_info {
155           volatile uint32_t cpu_status;
156           int valid;                              /* structure is valid */
157           struct {
158                     int32_t addr;
159                     int32_t args;
160                     uint64_t sp;
161                     uint64_t gp;
162           } entry;
163           u_int master_cpu;
164           uint32_t master_cpu_mask;
165           uint32_t buddy_cpu_mask;
166           uint32_t psb_os_cpu_map;
167           int argc;
168           uint32_t argv[XLR_MAX_ARGV];            /* pointers ... */
169           char argv_buf[XLR_ARGV_BUF_SIZE];       /* ... storage */
170           int valid_tlb_entries;
171           struct lib_cpu_tlb_mapping tlb_map[MAX_TLB_MAPPINGS];
172           struct core_segment_info seg_info[MAX_ELF_SEGMENTS];
173           int envc;
174           uint32_t envs[XLR_MAX_ENV];
175           char env_buf[XLR_ENV_BUF_SIZE];
176           uint32_t app_mode;
177           int32_t printk_lock;
178           int kseg_master;
179           int32_t kuseg_reentry_function;
180           uint32_t kuseg_reentry_args;
181           uint64_t app_shared_mem_addr;
182           uint64_t app_shared_mem_size;
183           uint64_t app_shared_mem_orig;
184           int32_t loader_lock;
185           int32_t global_wakeup_mask;
186           union {
187                     uint32_t unused_0;
188                     struct vcpu_extended_info *vcpu_extended_info;
189           };
190 } rmixlfw_cpu_wakeup_info_t;
191 
192 /* RMI firmware-defined IPI IRQs */
193 #define RMIXLFW_IPI_STOP      51
194 #define RMIXLFW_IPI_WAKEUP    52
195 #define RMIXLFW_IPI_RECLAIM   53
196 
197 #endif    /* _ARCH_MIPS_RMI_RMIXL_FIRMWARE_H_ */
198