mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-17 10:26:15 +00:00
Start to make it easier to add AT91RM9200 based boards:
o Copy kb920x_machdep.c to at91_machdep.c o Move board_init to new board_kb920x.c o rename ramsize to at91_ramsize and make it accessible to board_* files. o Delete files.kb920x. We can do this selection with the new boards. o Add a stub for the tsc4370 board init, which will be added in a future commit. o Add new 'devices' at91_board_kb920x and at91_board_tsc4370. More are needed and will be added in future commits. Reviewed by: stass, cognet
This commit is contained in:
parent
c55f5be9d1
commit
26d9c85a3a
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=185305
@ -91,6 +91,7 @@ __FBSDID("$FreeBSD$");
|
||||
#include <machine/bus.h>
|
||||
#include <sys/reboot.h>
|
||||
|
||||
#include <arm/at91/at91board.h>
|
||||
#include <arm/at91/at91rm92reg.h>
|
||||
#include <arm/at91/at91_piovar.h>
|
||||
#include <arm/at91/at91_pio_rm9200.h>
|
||||
@ -141,7 +142,7 @@ static void *boot_arg2;
|
||||
static struct trapframe proc0_tf;
|
||||
|
||||
/* Static device mappings. */
|
||||
static const struct pmap_devmap kb920x_devmap[] = {
|
||||
static const struct pmap_devmap at91rm9200_devmap[] = {
|
||||
/*
|
||||
* Map the on-board devices VA == PA so that we can access them
|
||||
* with the MMU on or off.
|
||||
@ -187,8 +188,8 @@ static const struct pmap_devmap kb920x_devmap[] = {
|
||||
}
|
||||
};
|
||||
|
||||
static long
|
||||
ramsize(void)
|
||||
long
|
||||
at91_ramsize(void)
|
||||
{
|
||||
uint32_t *SDRAMC = (uint32_t *)(AT91RM92_BASE + AT91RM92_SDRAMC_BASE);
|
||||
uint32_t cr, mr;
|
||||
@ -203,50 +204,6 @@ ramsize(void)
|
||||
return (1 << (cols + rows + banks + bw));
|
||||
}
|
||||
|
||||
static long
|
||||
board_init(void)
|
||||
{
|
||||
/*
|
||||
* Since the USART supports RS-485 multidrop mode, it allows the
|
||||
* TX pins to float. However, for RS-232 operations, we don't want
|
||||
* these pins to float. Instead, they should be pulled up to avoid
|
||||
* mismatches. Linux does something similar when it configures the
|
||||
* TX lines. This implies that we also allow the RX lines to float
|
||||
* rather than be in the state they are left in by the boot loader.
|
||||
* Since they are input pins, I think that this is the right thing
|
||||
* to do.
|
||||
*/
|
||||
|
||||
/* PIOA's A periph: Turn USART 0 and 2's TX/RX pins */
|
||||
at91_pio_use_periph_a(AT91RM92_PIOA_BASE,
|
||||
AT91C_PA18_RXD0 | AT91C_PA22_RXD2, 0);
|
||||
at91_pio_use_periph_a(AT91RM92_PIOA_BASE,
|
||||
AT91C_PA17_TXD0 | AT91C_PA23_TXD2, 1);
|
||||
/* PIOA's B periph: Turn USART 3's TX/RX pins */
|
||||
at91_pio_use_periph_b(AT91RM92_PIOA_BASE, AT91C_PA6_RXD3, 0);
|
||||
at91_pio_use_periph_b(AT91RM92_PIOA_BASE, AT91C_PA5_TXD3, 1);
|
||||
#ifdef AT91_TSC
|
||||
/* We're using TC0's A1 and A2 input */
|
||||
at91_pio_use_periph_b(AT91RM92_PIOA_BASE,
|
||||
AT91C_PA19_TIOA1 | AT91C_PA21_TIOA2, 0);
|
||||
#endif
|
||||
/* PIOB's A periph: Turn USART 1's TX/RX pins */
|
||||
at91_pio_use_periph_a(AT91RM92_PIOB_BASE, AT91C_PB21_RXD1, 0);
|
||||
at91_pio_use_periph_a(AT91RM92_PIOB_BASE, AT91C_PB20_TXD1, 1);
|
||||
|
||||
/* Pin assignment */
|
||||
#ifdef AT91_TSC
|
||||
/* Assert PA24 low -- talk to rubidium */
|
||||
at91_pio_use_gpio(AT91RM92_PIOA_BASE, AT91C_PIO_PA24);
|
||||
at91_pio_gpio_output(AT91RM92_PIOA_BASE, AT91C_PIO_PA24, 0);
|
||||
at91_pio_gpio_clear(AT91RM92_PIOA_BASE, AT91C_PIO_PA24);
|
||||
at91_pio_use_gpio(AT91RM92_PIOB_BASE,
|
||||
AT91C_PIO_PB16 | AT91C_PIO_PB17 | AT91C_PIO_PB18 | AT91C_PIO_PB19);
|
||||
#endif
|
||||
|
||||
return (ramsize());
|
||||
}
|
||||
|
||||
void *
|
||||
initarm(void *arg, void *arg2)
|
||||
{
|
||||
@ -353,7 +310,7 @@ initarm(void *arg, void *arg2)
|
||||
VM_PROT_READ|VM_PROT_WRITE, PTE_PAGETABLE);
|
||||
}
|
||||
|
||||
pmap_devmap_bootstrap(l1pagetable, kb920x_devmap);
|
||||
pmap_devmap_bootstrap(l1pagetable, at91rm9200_devmap);
|
||||
cpu_domains((DOMAIN_CLIENT << (PMAP_DOMAIN_KERNEL*2)) | DOMAIN_CLIENT);
|
||||
setttb(kernel_l1pt.pv_pa);
|
||||
cpu_tlb_flushID();
|
41
sys/arm/at91/at91board.h
Normal file
41
sys/arm/at91/at91board.h
Normal file
@ -0,0 +1,41 @@
|
||||
/*-
|
||||
* Copyright (c) 2008 Warner Losh. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/* $FreeBSD$ */
|
||||
|
||||
#ifndef _ARM_AT91_AT91BOARD_H_
|
||||
#define _ARM_AT91_AT91BOARD_H_
|
||||
|
||||
/*
|
||||
* These routines are used by board init routines
|
||||
*/
|
||||
long at91_ramsize(void);
|
||||
|
||||
/*
|
||||
* These routines are expected to be provided by the board files.
|
||||
*/
|
||||
long board_init(void);
|
||||
|
||||
#endif /* _ARM_AT91_AT91BOARD_H_ */
|
@ -43,5 +43,4 @@ struct at91_ivar {
|
||||
struct resource_list resources;
|
||||
};
|
||||
|
||||
|
||||
#endif /* _AT91VAR_H_ */
|
||||
|
81
sys/arm/at91/board_kb920x.c
Normal file
81
sys/arm/at91/board_kb920x.c
Normal file
@ -0,0 +1,81 @@
|
||||
/*-
|
||||
* Copyright (c) 2005-2008 Olivier Houchard. All rights reserved.
|
||||
* Copyright (c) 2005-2008 Warner Losh. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "opt_at91.h"
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
||||
#include <arm/at91/at91board.h>
|
||||
#include <arm/at91/at91rm92reg.h>
|
||||
#include <arm/at91/at91_piovar.h>
|
||||
#include <arm/at91/at91_pio_rm9200.h>
|
||||
|
||||
long
|
||||
board_init(void)
|
||||
{
|
||||
/*
|
||||
* Since the USART supports RS-485 multidrop mode, it allows the
|
||||
* TX pins to float. However, for RS-232 operations, we don't want
|
||||
* these pins to float. Instead, they should be pulled up to avoid
|
||||
* mismatches. Linux does something similar when it configures the
|
||||
* TX lines. This implies that we also allow the RX lines to float
|
||||
* rather than be in the state they are left in by the boot loader.
|
||||
* Since they are input pins, I think that this is the right thing
|
||||
* to do.
|
||||
*/
|
||||
|
||||
/* PIOA's A periph: Turn USART 0 and 2's TX/RX pins */
|
||||
at91_pio_use_periph_a(AT91RM92_PIOA_BASE,
|
||||
AT91C_PA18_RXD0 | AT91C_PA22_RXD2, 0);
|
||||
at91_pio_use_periph_a(AT91RM92_PIOA_BASE,
|
||||
AT91C_PA17_TXD0 | AT91C_PA23_TXD2, 1);
|
||||
/* PIOA's B periph: Turn USART 3's TX/RX pins */
|
||||
at91_pio_use_periph_b(AT91RM92_PIOA_BASE, AT91C_PA6_RXD3, 0);
|
||||
at91_pio_use_periph_b(AT91RM92_PIOA_BASE, AT91C_PA5_TXD3, 1);
|
||||
#ifdef AT91_TSC
|
||||
/* We're using TC0's A1 and A2 input */
|
||||
at91_pio_use_periph_b(AT91RM92_PIOA_BASE,
|
||||
AT91C_PA19_TIOA1 | AT91C_PA21_TIOA2, 0);
|
||||
#endif
|
||||
/* PIOB's A periph: Turn USART 1's TX/RX pins */
|
||||
at91_pio_use_periph_a(AT91RM92_PIOB_BASE, AT91C_PB21_RXD1, 0);
|
||||
at91_pio_use_periph_a(AT91RM92_PIOB_BASE, AT91C_PB20_TXD1, 1);
|
||||
|
||||
/* Pin assignment */
|
||||
#ifdef AT91_TSC
|
||||
/* Assert PA24 low -- talk to rubidium */
|
||||
at91_pio_use_gpio(AT91RM92_PIOA_BASE, AT91C_PIO_PA24);
|
||||
at91_pio_gpio_output(AT91RM92_PIOA_BASE, AT91C_PIO_PA24, 0);
|
||||
at91_pio_gpio_clear(AT91RM92_PIOA_BASE, AT91C_PIO_PA24);
|
||||
at91_pio_use_gpio(AT91RM92_PIOB_BASE,
|
||||
AT91C_PIO_PB16 | AT91C_PIO_PB17 | AT91C_PIO_PB18 | AT91C_PIO_PB19);
|
||||
#endif
|
||||
|
||||
return (at91_ramsize());
|
||||
}
|
@ -1,6 +1,7 @@
|
||||
# $FreeBSD$
|
||||
arm/arm/cpufunc_asm_arm9.S standard
|
||||
arm/arm/irq_dispatch.S standard
|
||||
arm/at91/at91_machdep.c standard
|
||||
arm/at91/at91.c standard
|
||||
arm/at91/at91_st.c standard
|
||||
arm/at91/at91_mci.c optional at91_mci
|
||||
@ -18,3 +19,8 @@ arm/at91/ohci_atmelarm.c optional ohci
|
||||
arm/at91/uart_bus_at91usart.c optional uart
|
||||
arm/at91/uart_cpu_at91rm9200usart.c optional uart
|
||||
arm/at91/uart_dev_at91usart.c optional uart
|
||||
#
|
||||
# All the boards we support
|
||||
#
|
||||
arm/at91/board_kb920x.c optional at91_board_kb920x
|
||||
arm/at91/board_tsc4370.c optional at91_board_tsc4370
|
||||
|
@ -1,2 +0,0 @@
|
||||
#$FreeBSD$
|
||||
arm/at91/kb920x_machdep.c standard
|
@ -1,9 +1,10 @@
|
||||
#$FreeBSD$
|
||||
include "../at91/std.at91"
|
||||
files "../at91/files.kb920x"
|
||||
|
||||
options STARTUP_PAGETABLE_ADDR=0x20800000
|
||||
makeoptions KERNPHYSADDR=0x20000000
|
||||
makeoptions KERNVIRTADDR=0xc0000000
|
||||
options KERNPHYSADDR=0x20000000
|
||||
options KERNVIRTADDR=0xc0000000
|
||||
|
||||
device at91_board_kb920x
|
||||
|
Loading…
Reference in New Issue
Block a user