You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
310 lines
9.6 KiB
310 lines
9.6 KiB
/* |
|
* Copyright (C) 2013 Pantelis Antoniou <panto@antoniou-consulting.com> |
|
* |
|
* This program is free software; you can redistribute it and/or modify |
|
* it under the terms of the GNU General Public License version 2 as |
|
* published by the Free Software Foundation. |
|
*/ |
|
/dts-v1/; |
|
/plugin/; |
|
|
|
/ { |
|
compatible = "ti,beaglebone", "ti,beaglebone-black"; |
|
|
|
/* identification */ |
|
part-number = "BB-BONE-PRU-04"; |
|
version = "00A0"; |
|
|
|
/* state the resources this cape uses */ |
|
exclusive-use = |
|
/* the pin header uses */ |
|
// "P9.27", /* pru0: pr1_pru0_pru_r30_5 */ |
|
|
|
"P8.15", /* pru0: pr1_pru0_pru_r30_15 */ |
|
// "P8.12", /* pru0: pr1_pru0_pru_r30_14 */ |
|
// "P9.25", /* pru0: pr1_pru0_pru_r30_7 */ |
|
// "P9.41", /* pru0: pr1_pru0_pru_r30_6 */ |
|
// "P9.42", /* pru0: pr1_pru0_pru_r30_4 */ |
|
// "P9.28", /* pru0: pr1_pru0_pru_r30_3 */ |
|
// "P9.30", /* pru0: pr1_pru0_pru_r30_2 */ |
|
// "P9.29", /* pru0: pr1_pru0_pru_r30_1 */ |
|
// "P9.31", /* pru0: pr1_pru0_pru_r30_0 */ |
|
/* pru0: pr1_pru0_pru_r30_13 is on MMC0_CMD */ |
|
/* pru0: pr1_pru0_pru_r30_12 is on MMC0_CLK */ |
|
/* pru0: pr1_pru0_pru_r30_11 is on MMC0_DAT0 */ |
|
/* pru0: pr1_pru0_pru_r30_10 is on MMC0_DAT1 */ |
|
/* pru0: pr1_pru0_pru_r30_9 is on MMC0_DAT2 */ |
|
/* pru0: pr1_pru0_pru_r30_8 is on MMC0_DAT3 */ |
|
|
|
//"P8.20", /* pru1: pr1_pru1_pru_r30_13 */ |
|
|
|
//"P8.21", /* pru1: pr1_pru1_pru_r30_12 */ |
|
"P8.27", /* pru1: pr1_pru1_pru_r30_8 */ |
|
"P8.28", /* pru1: pr1_pru1_pru_r30_10 */ |
|
"P8.29", /* pru1: pr1_pru1_pru_r30_9 */ |
|
"P8.30", /* pru1: pr1_pru1_pru_r30_11 */ |
|
"P8.39", /* pru1: pr1_pru1_pru_r30_6 */ |
|
"P8.40", /* pru1: pr1_pru1_pru_r30_7 */ |
|
"P8.41", /* pru1: pr1_pru1_pru_r30_4 */ |
|
"P8.42", /* pru1: pr1_pru1_pru_r30_5 */ |
|
"P8.43", /* pru1: pr1_pru1_pru_r30_2 */ |
|
"P8.44", /* pru1: pr1_pru1_pru_r30_3 */ |
|
"P8.45", /* pru1: pr1_pru1_pru_r30_0 */ |
|
"P8.46", /* pru1: pr1_pru1_pru_r30_1 */ |
|
/* pru1: pr1_pru1_pru_r30_14 is on UART0_RXD */ |
|
/* pru1: pr1_pru1_pru_r30_15 is on UART0_TXD */ |
|
/* the hardware IP uses */ |
|
"pru0", |
|
"pru1"; |
|
|
|
fragment@0 { |
|
target = <&am33xx_pinmux>; |
|
__overlay__ { |
|
|
|
pru_gpio_pins: pinmux_pru_gpio_pins { |
|
pinctrl-single,pins = < |
|
0x1a4 0x0f /* P9 27 GPIO3_19: mcasp0_fsr.gpio3[19] | MODE7 | OUTPUT */ |
|
>; |
|
}; |
|
|
|
pru_pru_pins: pinmux_pru_pru_pins { |
|
pinctrl-single,pins = < |
|
// 0x1a4 0x25 /* mcasp0_fsr.pr1_pru0_pru_r30_5, MODE5 | OUTPUT | PRU */ |
|
0x03c 0x26 /* gpmc_ad13.pr1_pru0_pru_r30_15, MODE6 | OUTPUT | PRU */ |
|
// 0x030 0x26 /* gpmc_ad12.pr1_pru0_pru_r30_14, MODE6 | OUTPUT | PRU */ |
|
// 0x1ac 0x25 /* mcasp0_ahclkx.pr1_pru0_pru_r30_7, MODE5 | OUTPUT | PRU */ |
|
// 0x1a8 0x25 /* mcasp0_axr1.pr1_pru0_pru_r30_6, MODE5 | OUTPUT | PRU */ |
|
// 0x1a0 0x25 /* mcasp0_aclkr.pr1_pru0_pru_r30_4, MODE5 | OUTPUT | PRU */ |
|
// 0x19c 0x25 /* mcasp0_ahclkr.pr1_pru0_pru_r30_3, MODE5 | OUTPUT | PRU */ |
|
// 0x198 0x25 /* mcasp0_axr0.pr1_pru0_pru_r30_2, MODE5 | OUTPUT | PRU */ |
|
// 0x194 0x25 /* mcasp0_fsx.pr1_pru0_pru_r30_1, MODE5 | OUTPUT | PRU */ |
|
// 0x190 0x25 /* mcasp0_aclkx.pr1_pru0_pru_r30_0, MODE5 | OUTPUT | PRU */ |
|
|
|
//0x084 0x25 /* gpmc_csn2.pr1_pru1_pru_r30_13, MODE5 | OUTPUT | PRU */ |
|
//0x080 0x25 /* gpmc_csn1.pr1_pru1_pru_r30_12, MODE5 | OUTPUT | PRU */ |
|
0x0e0 0x25 /* lcd_vsync.pr1_pru1_pru_r30_8, MODE5 | OUTPUT | PRU */ |
|
0x0e8 0x25 /* lcd_pclk.pr1_pru1_pru_r30_10, MODE5 | OUTPUT | PRU */ |
|
0x0e4 0x25 /* lcd_hsync.pr1_pru1_pru_r30_9, MODE5 | OUTPUT | PRU */ |
|
0x0ec 0x25 /* lcd_ac_bias_en.pr1_pru1_pru_r30_11, MODE5 | OUTPUT | PRU */ |
|
0x0b8 0x25 /* pr1_pru1_pru_r30_6, MODE5 | OUTPUT | PRU */ |
|
0x0bc 0x25 /* lcd_data7.pr1_pru1_pru_r30_7, MODE5 | OUTPUT | PRU */ |
|
0x0b0 0x25 /* lcd_data4.pr1_pru1_pru_r30_4, MODE5 | OUTPUT | PRU */ |
|
0x0b4 0x25 /* lcd_data5.pr1_pru1_pru_r30_5, MODE5 | OUTPUT | PRU */ |
|
0x0a8 0x25 /* pr1_pru1_pru_r31_2, MODE5 | OUTPUT | PRU */ |
|
0x0ac 0x25 /* lcd_data3.pr1_pru1_pru_r30_3, MODE5 | OUTPUT | PRU */ |
|
0x0a0 0x25 /* lcd_data0.pr1_pru1_pru_r30_0, MODE5 | OUTPUT | PRU */ |
|
0x0a4 0x25 /* lcd_data1.pr1_pru1_pru_r30_1, MODE5 | OUTPUT | PRU */ |
|
>; |
|
}; |
|
}; |
|
}; |
|
|
|
fragment@2 { |
|
target = <&ocp>; |
|
|
|
__overlay__ { |
|
|
|
/* avoid stupid warning */ |
|
#address-cells = <1>; |
|
#size-cells = <1>; |
|
|
|
prurproc { |
|
compatible = "ti,pru-rproc"; |
|
|
|
pinctrl-names = "default"; |
|
pinctrl-0 = <&pru_pru_pins>; |
|
|
|
reg = <0x4a300000 0x080000>; |
|
|
|
status = "okay"; |
|
|
|
ti,hwmods = "pruss"; |
|
ti,deassert-hard-reset = "pruss", "pruss"; |
|
interrupt-parent = <&intc>; |
|
|
|
/* interrupts on the host */ |
|
interrupts = <20 21 22 23 24 25 26 27>; |
|
|
|
/* events these interrupts map to (host interrupt) */ |
|
events = <2 3 4 5 6 7 8 9>; |
|
|
|
/* PRU interrupt controller offset */ |
|
pintc = <0x20000>; |
|
|
|
/* 12K Shared Data RAM global, size, local */ |
|
pdram = <0x10000 0x03000 0x10000>; |
|
|
|
/* |
|
* SYSEVENT ids |
|
* |
|
* - PRU/ARM communication |
|
* PRU0_PRU1 17 |
|
* PRU1_PRU0 18 |
|
* PRU0_ARM 19 |
|
* PRU1_ARM 20 |
|
* ARM_PRU0 21 |
|
* ARM_PRU1 22 |
|
* |
|
* Full SYSEVENT list |
|
* |
|
* parity_err_intr_pend 0 |
|
* pru0_r31_status_cnt16 1 |
|
* pru1_r31_status_cnt16 2 |
|
* uart_urxevt_intr_req 4 |
|
* uart_utxevt_intr_req 5 |
|
* uart_uint_intr_req 6 |
|
* iep_tim_cap_cmp_pend 7 |
|
* ecap_intr_req 15 |
|
* pru_mst_intr[0-15]_intr_req 16-31 |
|
* nirq 32 (UART1) |
|
* mcasp_x_intr_pend 33 (MCASP1) |
|
* mcasp_r_intr_pend 34 (MCASP1) |
|
* ecap_intr_intr_pend 35 (ECAP1) |
|
* ecap_intr_intr_pend 36 (ECAP2) |
|
* epwm_intr_intr_pend 37 (eHRPWM2) |
|
* dcan_uerr 38 (DCAN0) |
|
* dcan_int1 39 (DCAN0) |
|
* dcan_intr 40 (DCAN0) |
|
* POINTRPEND 41 (I2C0) |
|
* ecap_intr_intr_pend 42 (ECAP0) |
|
* epwm_intr_intr_pend 43 (eHRPWM0) |
|
* SINTERRUPTN 44 (McSPI0) |
|
* eqep_intr_intr_pend 45 (eQEP0) |
|
* epwm_intr_intr_pend 46 (eHRPWM1) |
|
* c0_misc_pend 47 3PGSW (GEMAC) |
|
* c0_tx_pend 48 3PGSW (GEMAC) |
|
* c0_rx_pend 49 3PGSW (GEMAC) |
|
* c0_rx_thresh_pend 50 3PGSW (GEMAC) |
|
* nirq 51 (UART0) |
|
* nirq 52 (UART2) |
|
* gen_intr_pend 53 (ADC_TSC) |
|
* mcasp_r_intr_pend 54 (McASP0) |
|
* mcasp_x_intr_pend 55 (McASP1) |
|
* pwm_trip_zone 56 (eHRPWM0/eHRPWM1/eHRP WM2) |
|
* POINTRPEND1 57 (GPIO0) |
|
* Emulation Suspend Signal 58 (Debugss) |
|
* initiator_sinterrupt_q_n2 59 (Mbox0 - mail_u2_irq (mailbox interrupt for pru1)) |
|
* initiator_sinterrupt_q_n1 60 (Mbox0 - mail_u1_irq (mailbox interrupt for pru0)) |
|
* tptc_erint_pend_po 61 (TPTC0 (EDMA)) |
|
* tpcc_errint_pend_po 62 (TPCC (EDMA)) |
|
* tpcc_int_pend_po1 63 (TPCC (EDMA)) |
|
* |
|
* HOST interrupt ids |
|
* |
|
* PRU0 0 |
|
* PRU1 1 |
|
* EVTOUT0-7 2-9 |
|
*/ |
|
|
|
/* sysevent map to intc channel */ |
|
sysevent-to-channel-map = |
|
<17 1>, /* PRU0_PRU1 -> CH1 */ |
|
<18 0>, /* PRU1_PRU0 -> CH0 */ |
|
<19 2>, /* PRU0_ARM -> CH2 */ |
|
<20 3>, /* PRU1_ARM -> CH3 */ |
|
<21 0>, /* ARM_PRU0 -> CH0 */ |
|
<22 1>, /* ARM_PRU1 -> CH1 */ |
|
<24 4>, /* VRING Host->PRU0 -> CH4 */ |
|
<25 5>, /* VRING PRU0->Host -> CH5 */ |
|
<26 6>, /* VRING Host->PRU1 -> CH6 */ |
|
<27 7>; /* VRING PRU1->Host -> CH7 */ |
|
|
|
/* channel to host interrupt map */ |
|
channel-to-host-interrupt-map = |
|
<0 0>, /* CH0 -> PRU0 */ |
|
<1 1>, /* CH1 -> PRU1 */ |
|
<2 2>, /* CH2 -> EVTOUT0 */ |
|
<3 3>, /* CH3 -> EVTOUT1 */ |
|
<4 0>, /* CH4 -> PRU0 */ |
|
<5 6>, /* CH5 -> EVTOUT4 */ |
|
<6 1>, /* CH6 -> PRU1 */ |
|
<7 7>; /* CH7 -> EVTOUT5 */ |
|
|
|
/* indices are ARM=0, PRU0=1, PRU1=2 */ |
|
target-to-sysevent-map = |
|
<0xffffffff 21 22>, /* ARM: DONTCARE, ARM_PRU0, ARM_PRU1 */ |
|
< 19 0xffffffff 17>, /* PRU0: PRU0_ARM, DONTCARE, PRU0_PRU1 */ |
|
< 20 18 0xffffffff>; /* PRU1: PRU1_ARM, PRU1_PRU0, DONTCARE */ |
|
|
|
/* both the PRUs have 200MHz frequency so period is 5ns */ |
|
clock-freq = <200000000>; |
|
|
|
/* the linux pwms we support */ |
|
pru-pwm-channels = <0 1 2 3 4 5 6 7 8 9 10 11 12 13 21>; |
|
/* first PRU controls the PWMs */ |
|
pru-pwm-controller = <0>; |
|
/* the IDs of the downcalls the firmware expects for PWMs */ |
|
/* CONFIG=0, ENABLE=1, DISABLE=2 */ |
|
pru-pwm-dc-ids = <0 1 2>; |
|
|
|
/* definition for the first PRU */ |
|
pru0 { |
|
pru-index = <0>; |
|
|
|
/* offset, size, local */ |
|
iram = <0x34000 0x02000 0x00000>; /* code ram (8K) */ |
|
|
|
/* offset, size, local, other */ |
|
dram = <0x00000 0x02000 0x00000 0x10000>; /* data ram (8K) */ |
|
|
|
pctrl = <0x22000>; |
|
pdbg = <0x22400>; |
|
|
|
firmware-elf; |
|
firmware = "rcinpru0"; |
|
|
|
/* sysevents signaling ring activity (host, pru)*/ |
|
vring-sysev = <24 25>; |
|
|
|
resource_table { |
|
resource-table; |
|
version = <1>; |
|
|
|
pru0_rproc_serial: pru0_vdev_rproc_serial { |
|
vdev-rproc-serial; |
|
|
|
/* notification IDs are totally bogus */ |
|
/* rproc will idr_alloc anyway */ |
|
|
|
notifyid = <8>; /* <- bogus */ |
|
/* da align num notifyid */ |
|
vring-0 = <0 16 8 0>; |
|
vring-1 = <0 16 8 0>; |
|
}; |
|
|
|
// pru0_rproc_rpmsg: pru0_vdev_rproc_rpmsg { |
|
// vdev-rpmsg; |
|
// |
|
// /* notification IDs are totally bogus */ |
|
// /* rproc will idr_alloc anyway */ |
|
// |
|
// notifyid = <9>; /* <- bogus */ |
|
// /* da align num notifyid */ |
|
// vring-0 = <0 16 512 0>; |
|
// vring-1 = <0 16 512 0>; |
|
// }; |
|
}; |
|
}; |
|
|
|
/* definition for the second PRU */ |
|
pru1 { |
|
pru-index = <1>; |
|
|
|
/* offset, size, local */ |
|
iram = <0x38000 0x02000 0x00000>; /* code ram (8K) */ |
|
|
|
/* offset, size, local, other */ |
|
dram = <0x02000 0x02000 0x00000 0x10000>; /* data ram (8K) */ |
|
|
|
pctrl = <0x24000>; |
|
pdbg = <0x24400>; |
|
|
|
firmware-elf; |
|
firmware = "pwmpru1"; |
|
|
|
/* NOTE: no resource table, no vrings for this one */ |
|
}; |
|
}; |
|
}; |
|
}; |
|
};
|
|
|