mvvar.h revision 295883
178189Sbrian/*-
278189Sbrian * Copyright (c) 2002, 2003 Wasabi Systems, Inc.
378189Sbrian * All rights reserved.
478189Sbrian *
578189Sbrian * Written by Jason R. Thorpe for Wasabi Systems, Inc.
66059Samurai *
778189Sbrian * Redistribution and use in source and binary forms, with or without
878189Sbrian * modification, are permitted provided that the following conditions
978189Sbrian * are met:
1078189Sbrian * 1. Redistributions of source code must retain the above copyright
1178189Sbrian *    notice, this list of conditions and the following disclaimer.
1278189Sbrian * 2. Redistributions in binary form must reproduce the above copyright
1378189Sbrian *    notice, this list of conditions and the following disclaimer in the
1478189Sbrian *    documentation and/or other materials provided with the distribution.
156059Samurai * 3. All advertising materials mentioning features or use of this software
1678189Sbrian *    must display the following acknowledgement:
1778189Sbrian *	This product includes software developed for the NetBSD Project by
1878189Sbrian *	Wasabi Systems, Inc.
1978189Sbrian * 4. The name of Wasabi Systems, Inc. may not be used to endorse
2078189Sbrian *    or promote products derived from this software without specific prior
2178189Sbrian *    written permission.
2278189Sbrian *
2378189Sbrian * THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``AS IS'' AND
2478189Sbrian * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
2578189Sbrian * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
2678189Sbrian * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL WASABI SYSTEMS, INC
276059Samurai * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
2850479Speter * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
296059Samurai * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
3078189Sbrian * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
3143313Sbrian * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
3230715Sbrian * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
3336285Sbrian * POSSIBILITY OF SUCH DAMAGE.
3436285Sbrian *
3581634Sbrian * from: FreeBSD: //depot/projects/arm/src/sys/arm/xscale/pxa2x0/pxa2x0var.h, rev 1
3636285Sbrian *
3730715Sbrian * $FreeBSD: head/sys/arm/mv/mvvar.h 295883 2016-02-22 09:10:23Z skra $
3843888Sbrian */
3943888Sbrian
4093418Sbrian#ifndef _MVVAR_H_
4136287Sbrian#define _MVVAR_H_
4237192Sbrian
4330715Sbrian#include <sys/rman.h>
4443888Sbrian#include <machine/bus.h>
4543888Sbrian#include <vm/vm.h>
4649976Sbrian#include <vm/pmap.h>
4730715Sbrian
4844106Sbrian#include <dev/ofw/openfirm.h>
4943888Sbrian
5036285Sbrian#define	MV_TYPE_PCI		0
5143888Sbrian#define	MV_TYPE_PCIE		1
5229840Sbrian
5346686Sbrian#define MV_MODE_ENDPOINT	0
5430715Sbrian#define MV_MODE_ROOT		1
5530715Sbrian
5630715Sbrianstruct gpio_config {
5730715Sbrian	int		gc_gpio;	/* GPIO number */
586059Samurai	uint32_t	gc_flags;	/* GPIO flags */
5946686Sbrian	int		gc_output;	/* GPIO output value */
6036285Sbrian};
616059Samurai
6263484Sbrianstruct decode_win {
636735Samurai	int		target;		/* Mbus unit ID */
6436285Sbrian	int		attr;		/* Attributes of the target interface */
6536285Sbrian	vm_paddr_t	base;		/* Physical base addr */
6636285Sbrian	uint32_t	size;
6743888Sbrian	vm_paddr_t	remap;
6836285Sbrian};
6936285Sbrian
7081634Sbrianextern const struct gpio_config mv_gpio_config[];
7136285Sbrianextern const struct decode_win *cpu_wins;
7236285Sbrianextern const struct decode_win *idma_wins;
7336285Sbrianextern const struct decode_win *xor_wins;
7436285Sbrianextern int idma_wins_no;
7536285Sbrianextern int xor_wins_no;
7636285Sbrian
7743313Sbrian/* Function prototypes */
7843313Sbrianint mv_gpio_setup_intrhandler(const char *name, driver_filter_t *filt,
7943313Sbrian    void (*hand)(void *), void *arg, int pin, int flags, void **cookiep);
8081634Sbrianvoid mv_gpio_intr_mask(int pin);
8181634Sbrianvoid mv_gpio_intr_unmask(int pin);
8236285Sbrianvoid mv_gpio_out(uint32_t pin, uint8_t val, uint8_t enable);
8336285Sbrianuint8_t mv_gpio_in(uint32_t pin);
8438174Sbrian
8543888Sbrianint soc_decode_win(void);
8636285Sbrianvoid soc_id(uint32_t *dev, uint32_t *rev);
8793418Sbrianvoid soc_dump_decode_win(void);
8836287Sbrianuint32_t soc_power_ctrl_get(uint32_t mask);
8967910Sbrianvoid soc_power_ctrl_set(uint32_t mask);
9037192Sbrianuint64_t get_sar_value(void);
9155253Sbrian
926059Samuraiint decode_win_cpu_set(int target, int attr, vm_paddr_t base, uint32_t size,
9355146Sbrian    vm_paddr_t remap);
9419866Sphkint decode_win_overlap(int, int, const struct decode_win *);
956059Samuraiint win_cpu_can_remap(int);
9643693Sbrianvoid decode_win_pcie_setup(u_long);
976059Samurai
9830715Sbrianvoid ddr_disable(int i);
9936285Sbrianint ddr_is_active(int i);
10043693Sbrianuint32_t ddr_base(int i);
1016059Samuraiuint32_t ddr_size(int i);
1026059Samuraiuint32_t ddr_attr(int i);
1036059Samuraiuint32_t ddr_target(int i);
1046059Samurai
1056059Samuraiuint32_t cpu_extra_feat(void);
10628679Sbrianuint32_t get_tclk(void);
1076059Samuraiuint32_t get_l2clk(void);
1086059Samuraiuint32_t read_cpu_ctrl(uint32_t);
1096059Samuraivoid write_cpu_ctrl(uint32_t, uint32_t);
11054912Sbrian
11130715Sbrian#if defined(SOC_MV_ARMADAXP) || defined(SOC_MV_ARMADA38X)
1126059Samuraiuint32_t read_cpu_mp_clocks(uint32_t reg);
11330715Sbrianvoid write_cpu_mp_clocks(uint32_t reg, uint32_t val);
11436285Sbrianuint32_t read_cpu_misc(uint32_t reg);
11537926Sbrianvoid write_cpu_misc(uint32_t reg, uint32_t val);
11637926Sbrian#endif
11737926Sbrian
11837926Sbrianint mv_pcib_bar_win_set(device_t dev, uint32_t base, uint32_t size,
11946686Sbrian    uint32_t remap, int winno, int busno);
12050867Sbrianint mv_pcib_cpu_win_remap(device_t dev, uint32_t remap, uint32_t size);
1216059Samurai
1226059Samuraivoid mv_mask_endpoint_irq(uintptr_t nb, int unit);
12343693Sbrianvoid mv_unmask_endpoint_irq(uintptr_t nb, int unit);
12444123Sbrian
12593418Sbrianint	mv_drbl_get_next_irq(int dir, int unit);
12667910Sbrianvoid	mv_drbl_mask_all(int unit);
12744123Sbrianvoid	mv_drbl_mask_irq(uint32_t irq, int dir, int unit);
12844123Sbrianvoid	mv_drbl_unmask_irq(uint32_t irq, int dir, int unit);
1296059Samuraivoid	mv_drbl_set_mask(uint32_t val, int dir, int unit);
13043693Sbrianuint32_t mv_drbl_get_mask(int dir, int unit);
13143693Sbrianvoid	mv_drbl_set_cause(uint32_t val, int dir, int unit);
13243693Sbrianuint32_t mv_drbl_get_cause(int dir, int unit);
13343693Sbrianvoid	mv_drbl_set_msg(uint32_t val, int mnr, int dir, int unit);
13443693Sbrianuint32_t mv_drbl_get_msg(int mnr, int dir, int unit);
13543693Sbrian
13693418Sbrianint	mv_msi_data(int irq, uint64_t *addr, uint32_t *data);
13744106Sbrian
13843693Sbrianstruct arm_devmap_entry;
13943693Sbrian
14043693Sbrianint mv_pci_devmap(phandle_t, struct arm_devmap_entry *, vm_offset_t,
14143693Sbrian    vm_offset_t);
14243693Sbrianint fdt_localbus_devmap(phandle_t, struct arm_devmap_entry *, int, int *);
14343693Sbrian
14443693Sbrian#endif /* _MVVAR_H_ */
14544106Sbrian