📄 bamboo.c
字号:
{ /* Update GPIO Configuration Table */ gpio_tab[GPIO0][12].in_out = GPIO_IN; /* ZII_p0Rxd(0) */ gpio_tab[GPIO0][12].alt_nb = GPIO_ALT1; gpio_tab[GPIO0][13].in_out = GPIO_IN; /* ZII_p0Rxd(1) */ gpio_tab[GPIO0][13].alt_nb = GPIO_ALT1; gpio_tab[GPIO0][14].in_out = GPIO_IN; /* ZII_p0Rxd(2) */ gpio_tab[GPIO0][14].alt_nb = GPIO_ALT1; gpio_tab[GPIO0][15].in_out = GPIO_IN; /* ZII_p0Rxd(3) */ gpio_tab[GPIO0][15].alt_nb = GPIO_ALT1; gpio_tab[GPIO0][16].in_out = GPIO_OUT; /* ZII_p0Txd(0) */ gpio_tab[GPIO0][16].alt_nb = GPIO_ALT1; gpio_tab[GPIO0][17].in_out = GPIO_OUT; /* ZII_p0Txd(1) */ gpio_tab[GPIO0][17].alt_nb = GPIO_ALT1; gpio_tab[GPIO0][18].in_out = GPIO_OUT; /* ZII_p0Txd(2) */ gpio_tab[GPIO0][18].alt_nb = GPIO_ALT1; gpio_tab[GPIO0][19].in_out = GPIO_OUT; /* ZII_p0Txd(3) */ gpio_tab[GPIO0][19].alt_nb = GPIO_ALT1; gpio_tab[GPIO0][20].in_out = GPIO_IN; /* ZII_p0Rx_er */ gpio_tab[GPIO0][20].alt_nb = GPIO_ALT1; gpio_tab[GPIO0][21].in_out = GPIO_IN; /* ZII_p0Rx_dv */ gpio_tab[GPIO0][21].alt_nb = GPIO_ALT1; gpio_tab[GPIO0][22].in_out = GPIO_IN; /* ZII_p0Crs */ gpio_tab[GPIO0][22].alt_nb = GPIO_ALT1; gpio_tab[GPIO0][23].in_out = GPIO_OUT; /* ZII_p0Tx_er */ gpio_tab[GPIO0][23].alt_nb = GPIO_ALT1; gpio_tab[GPIO0][24].in_out = GPIO_OUT; /* ZII_p0Tx_en */ gpio_tab[GPIO0][24].alt_nb = GPIO_ALT1; gpio_tab[GPIO0][25].in_out = GPIO_IN; /* ZII_p0Col */ gpio_tab[GPIO0][25].alt_nb = GPIO_ALT1;}/*----------------------------------------------------------------------------+ | update_uic_0_3_irq_ios(). +----------------------------------------------------------------------------*/void update_uic_0_3_irq_ios(void){ gpio_tab[GPIO1][8].in_out = GPIO_IN; /* UIC_IRQ(0) */ gpio_tab[GPIO1][8].alt_nb = GPIO_ALT1; gpio_tab[GPIO1][9].in_out = GPIO_IN; /* UIC_IRQ(1) */ gpio_tab[GPIO1][9].alt_nb = GPIO_ALT1; gpio_tab[GPIO1][10].in_out = GPIO_IN; /* UIC_IRQ(2) */ gpio_tab[GPIO1][10].alt_nb = GPIO_ALT1; gpio_tab[GPIO1][11].in_out = GPIO_IN; /* UIC_IRQ(3) */ gpio_tab[GPIO1][11].alt_nb = GPIO_ALT1;}/*----------------------------------------------------------------------------+ | update_uic_4_9_irq_ios(). +----------------------------------------------------------------------------*/void update_uic_4_9_irq_ios(void){ gpio_tab[GPIO1][12].in_out = GPIO_IN; /* UIC_IRQ(4) */ gpio_tab[GPIO1][12].alt_nb = GPIO_ALT1; gpio_tab[GPIO1][13].in_out = GPIO_IN; /* UIC_IRQ(6) */ gpio_tab[GPIO1][13].alt_nb = GPIO_ALT1; gpio_tab[GPIO1][14].in_out = GPIO_IN; /* UIC_IRQ(7) */ gpio_tab[GPIO1][14].alt_nb = GPIO_ALT1; gpio_tab[GPIO1][15].in_out = GPIO_IN; /* UIC_IRQ(8) */ gpio_tab[GPIO1][15].alt_nb = GPIO_ALT1; gpio_tab[GPIO1][16].in_out = GPIO_IN; /* UIC_IRQ(9) */ gpio_tab[GPIO1][16].alt_nb = GPIO_ALT1;}/*----------------------------------------------------------------------------+ | update_dma_a_b_ios(). +----------------------------------------------------------------------------*/void update_dma_a_b_ios(void){ gpio_tab[GPIO1][12].in_out = GPIO_OUT; /* DMA_ACK(1) */ gpio_tab[GPIO1][12].alt_nb = GPIO_ALT2; gpio_tab[GPIO1][13].in_out = GPIO_BI; /* DMA_EOT/TC(1) */ gpio_tab[GPIO1][13].alt_nb = GPIO_ALT2; gpio_tab[GPIO1][14].in_out = GPIO_IN; /* DMA_REQ(0) */ gpio_tab[GPIO1][14].alt_nb = GPIO_ALT2; gpio_tab[GPIO1][15].in_out = GPIO_OUT; /* DMA_ACK(0) */ gpio_tab[GPIO1][15].alt_nb = GPIO_ALT2; gpio_tab[GPIO1][16].in_out = GPIO_BI; /* DMA_EOT/TC(0) */ gpio_tab[GPIO1][16].alt_nb = GPIO_ALT2;}/*----------------------------------------------------------------------------+ | update_dma_c_d_ios(). +----------------------------------------------------------------------------*/void update_dma_c_d_ios(void){ gpio_tab[GPIO0][0].in_out = GPIO_IN; /* DMA_REQ(2) */ gpio_tab[GPIO0][0].alt_nb = GPIO_ALT2; gpio_tab[GPIO0][1].in_out = GPIO_OUT; /* DMA_ACK(2) */ gpio_tab[GPIO0][1].alt_nb = GPIO_ALT2; gpio_tab[GPIO0][2].in_out = GPIO_BI; /* DMA_EOT/TC(2) */ gpio_tab[GPIO0][2].alt_nb = GPIO_ALT2; gpio_tab[GPIO0][3].in_out = GPIO_IN; /* DMA_REQ(3) */ gpio_tab[GPIO0][3].alt_nb = GPIO_ALT2; gpio_tab[GPIO0][4].in_out = GPIO_OUT; /* DMA_ACK(3) */ gpio_tab[GPIO0][4].alt_nb = GPIO_ALT2; gpio_tab[GPIO0][5].in_out = GPIO_BI; /* DMA_EOT/TC(3) */ gpio_tab[GPIO0][5].alt_nb = GPIO_ALT2;}/*----------------------------------------------------------------------------+ | update_ebc_master_ios(). +----------------------------------------------------------------------------*/void update_ebc_master_ios(void){ gpio_tab[GPIO0][27].in_out = GPIO_IN; /* EXT_EBC_REQ */ gpio_tab[GPIO0][27].alt_nb = GPIO_ALT1; gpio_tab[GPIO0][29].in_out = GPIO_OUT; /* EBC_EXT_HDLA */ gpio_tab[GPIO0][29].alt_nb = GPIO_ALT1; gpio_tab[GPIO0][30].in_out = GPIO_OUT; /* EBC_EXT_ACK */ gpio_tab[GPIO0][30].alt_nb = GPIO_ALT1; gpio_tab[GPIO0][31].in_out = GPIO_OUT; /* EBC_EXR_BUSREQ */ gpio_tab[GPIO0][31].alt_nb = GPIO_ALT1;}/*----------------------------------------------------------------------------+ | update_usb2_device_ios(). +----------------------------------------------------------------------------*/void update_usb2_device_ios(void){ gpio_tab[GPIO0][26].in_out = GPIO_IN; /* USB2D_RXVALID */ gpio_tab[GPIO0][26].alt_nb = GPIO_ALT2; gpio_tab[GPIO0][27].in_out = GPIO_IN; /* USB2D_RXERROR */ gpio_tab[GPIO0][27].alt_nb = GPIO_ALT2; gpio_tab[GPIO0][28].in_out = GPIO_OUT; /* USB2D_TXVALID */ gpio_tab[GPIO0][28].alt_nb = GPIO_ALT2; gpio_tab[GPIO0][29].in_out = GPIO_OUT; /* USB2D_PAD_SUSPNDM */ gpio_tab[GPIO0][29].alt_nb = GPIO_ALT2; gpio_tab[GPIO0][30].in_out = GPIO_OUT; /* USB2D_XCVRSELECT */ gpio_tab[GPIO0][30].alt_nb = GPIO_ALT2; gpio_tab[GPIO0][31].in_out = GPIO_OUT; /* USB2D_TERMSELECT */ gpio_tab[GPIO0][31].alt_nb = GPIO_ALT2; gpio_tab[GPIO1][0].in_out = GPIO_OUT; /* USB2D_OPMODE0 */ gpio_tab[GPIO1][0].alt_nb = GPIO_ALT1; gpio_tab[GPIO1][1].in_out = GPIO_OUT; /* USB2D_OPMODE1 */ gpio_tab[GPIO1][1].alt_nb = GPIO_ALT1;}/*----------------------------------------------------------------------------+ | update_pci_patch_ios(). +----------------------------------------------------------------------------*/void update_pci_patch_ios(void){ gpio_tab[GPIO0][29].in_out = GPIO_OUT; /* EBC_EXT_HDLA */ gpio_tab[GPIO0][29].alt_nb = GPIO_ALT1;}/*----------------------------------------------------------------------------+ | set_chip_gpio_configuration(unsigned char gpio_core) | Put the core impacted by clock modification and sharing in reset. | Config the select registers to resolve the sharing depending of the config. | Configure the GPIO registers. | +----------------------------------------------------------------------------*/void set_chip_gpio_configuration(unsigned char gpio_core){ unsigned char i=0, j=0, reg_offset = 0; unsigned long gpio_reg, gpio_core_add; /* GPIO config of the GPIOs 0 to 31 */ for (i=0; i<GPIO_MAX; i++, j++) { if (i == GPIO_MAX/2) { reg_offset = 4; j = i-16; } gpio_core_add = gpio_tab[gpio_core][i].add; if ( (gpio_tab[gpio_core][i].in_out == GPIO_IN) || (gpio_tab[gpio_core][i].in_out == GPIO_BI )) { switch (gpio_tab[gpio_core][i].alt_nb) { case GPIO_SEL: break; case GPIO_ALT1: gpio_reg = in32(GPIO_IS1(gpio_core_add+reg_offset)) & ~(GPIO_MASK >> (j*2)); gpio_reg = gpio_reg | (GPIO_IN_SEL >> (j*2)); out32(GPIO_IS1(gpio_core_add+reg_offset), gpio_reg); break; case GPIO_ALT2: gpio_reg = in32(GPIO_IS2(gpio_core_add+reg_offset)) & ~(GPIO_MASK >> (j*2)); gpio_reg = gpio_reg | (GPIO_IN_SEL >> (j*2)); out32(GPIO_IS2(gpio_core_add+reg_offset), gpio_reg); break; case GPIO_ALT3: gpio_reg = in32(GPIO_IS3(gpio_core_add+reg_offset)) & ~(GPIO_MASK >> (j*2)); gpio_reg = gpio_reg | (GPIO_IN_SEL >> (j*2)); out32(GPIO_IS3(gpio_core_add+reg_offset), gpio_reg); break; } } if ( (gpio_tab[gpio_core][i].in_out == GPIO_OUT) || (gpio_tab[gpio_core][i].in_out == GPIO_BI )) { switch (gpio_tab[gpio_core][i].alt_nb) { case GPIO_SEL: break; case GPIO_ALT1: gpio_reg = in32(GPIO_OS(gpio_core_add+reg_offset)) & ~(GPIO_MASK >> (j*2)); gpio_reg = gpio_reg | (GPIO_ALT1_SEL >> (j*2)); out32(GPIO_OS(gpio_core_add+reg_offset), gpio_reg); gpio_reg = in32(GPIO_TS(gpio_core_add+reg_offset)) & ~(GPIO_MASK >> (j*2)); gpio_reg = gpio_reg | (GPIO_ALT1_SEL >> (j*2)); out32(GPIO_TS(gpio_core_add+reg_offset), gpio_reg); break; case GPIO_ALT2: gpio_reg = in32(GPIO_OS(gpio_core_add+reg_offset)) & ~(GPIO_MASK >> (j*2)); gpio_reg = gpio_reg | (GPIO_ALT2_SEL >> (j*2)); out32(GPIO_OS(gpio_core_add+reg_offset), gpio_reg); gpio_reg = in32(GPIO_TS(gpio_core_add+reg_offset)) & ~(GPIO_MASK >> (j*2)); gpio_reg = gpio_reg | (GPIO_ALT2_SEL >> (j*2)); out32(GPIO_TS(gpio_core_add+reg_offset), gpio_reg); break; case GPIO_ALT3: gpio_reg = in32(GPIO_OS(gpio_core_add+reg_offset)) & ~(GPIO_MASK >> (j*2)); gpio_reg = gpio_reg | (GPIO_ALT3_SEL >> (j*2)); out32(GPIO_OS(gpio_core_add+reg_offset), gpio_reg); gpio_reg = in32(GPIO_TS(gpio_core_add+reg_offset)) & ~(GPIO_MASK >> (j*2)); gpio_reg = gpio_reg | (GPIO_ALT3_SEL >> (j*2)); out32(GPIO_TS(gpio_core_add+reg_offset), gpio_reg); break; } } }}/*----------------------------------------------------------------------------+ | force_bup_core_selection. +----------------------------------------------------------------------------*/void force_bup_core_selection(core_selection_t *core_select_P, config_validity_t *config_val_P){ /* Pointer invalid */ if (core_select_P == NULL) { printf("Configuration invalid pointer 1\n"); for (;;) ; } /* L4 Selection */ *(core_select_P+UART_CORE0) = CORE_SELECTED; *(core_select_P+UART_CORE1) = CORE_SELECTED; *(core_select_P+UART_CORE2) = CORE_SELECTED; *(core_select_P+UART_CORE3) = CORE_SELECTED; /* RMII Selection */ *(core_select_P+RMII_SEL) = CORE_SELECTED; /* External Interrupt 0-9 selection */ *(core_select_P+UIC_0_3) = CORE_SELECTED; *(core_select_P+UIC_4_9) = CORE_SELECTED; *(core_select_P+SCP_CORE) = CORE_SELECTED; *(core_select_P+DMA_CHANNEL_CD) = CORE_SELECTED; *(core_select_P+PACKET_REJ_FUNC_AVAIL) = CORE_SELECTED; *(core_select_P+USB1_DEVICE) = CORE_SELECTED; if (is_nand_selected()) { *(core_select_P+NAND_FLASH) = CORE_SELECTED; } *config_val_P = CONFIG_IS_VALID;}/*----------------------------------------------------------------------------+ | configure_ppc440ep_pins. +----------------------------------------------------------------------------*/void configure_ppc440ep_pins(void){ uart_config_nb_t uart_configuration; config_validity_t config_val = CONFIG_IS_INVALID; /* Create Core Selection Table */ core_selection_t ppc440ep_core_selection[MAX_CORE_SELECT_NB] = { CORE_NOT_SELECTED, /* IIC_CORE, */ CORE_NOT_SELECTED, /* SPC_CORE, */ CORE_NOT_SELECTED, /* DMA_CHANNEL_AB, */ CORE_NOT_SELECTED, /* UIC_4_9, */ CORE_NOT_SELECTED, /* USB2_HOST, */ CORE_NOT_SELECTED, /* DMA_CHANNEL_CD, */ CORE_NOT_SELECTED, /* USB2_DEVICE, */ CORE_NOT_SELECTED, /* PACKET_REJ_FUNC_AVAIL, */ CORE_NOT_SELECTED, /* USB1_DEVICE, */ CORE_NOT_SELECTED, /* EBC_MASTER, */ CORE_NOT_SELECTED, /* NAND_FLASH, */ CORE_NOT_SELECTED, /* UART_CORE0, */ CORE_NOT_SELECTED, /* UART_CORE1, */ CORE_NOT_SELECTED, /* UART_CORE2, */ CORE_NOT_SELECTED, /* UART_CORE3, */ CORE_NOT_SELECTED, /* MII_SEL, */ CORE_NOT_SELECTED, /* RMII_SEL, */ CORE_NOT_SELECTED, /* SMII_SEL, */ CORE_NOT_SELECTED, /* PACKET_REJ_FUNC_EN */ CORE_NOT_SELECTED, /* UIC_0_3 */ CORE_NOT_SELECTED, /* USB1_HOST */ CORE_NOT_SELECTED /* PCI_PATCH */ }; /* Table Default Initialisation + FPGA Access */ init_default_gpio(); set_chip_gpio_configuration(GPIO0); set_chip_gpio_configuration(GPIO1); /* Update Table */ force_bup_core_selection(ppc440ep_core_selection, &config_val);#if 0 /* test-only */ /* If we are running PIBS 1, force known configuration */ update_core_selection_table(ppc440ep_core_selection, &config_val);#endif /*----------------------------------------------------------------------------+ | SDR + ios table update + fpga initialization +----------------------------------------------------------------------------*/ unsigned long sdr0_pfc1 = 0; unsigned long sdr0_usb0 = 0; unsigned long sdr0_mfr = 0; /* PCI Always selected */ /* I2C Selection */ if (ppc440ep_core_selection[IIC_CORE] == CORE_SELECTED) { sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_SIS_MASK) |
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -