| /* |
| * linux/arch/arm/mach-comcerto/reset.c |
| * |
| * driver for block reset for all the devices availble in the |
| * c2000 device. |
| * |
| * Copyright (C) 2012 Mindspeed Technologies, Inc. |
| * |
| * This program is free software; you can redistribute it and/or modify |
| * it under the terms of the GNU General Public License as published by |
| * the Free Software Foundation; either version 2 of the License, or |
| * (at your option) any later version. |
| * |
| * This program is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| * GNU General Public License for more details. |
| * |
| * You should have received a copy of the GNU General Public License |
| * along with this program; if not, write to the Free Software |
| * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| * |
| */ |
| |
| #include <linux/module.h> |
| #include <mach/reset.h> |
| #include <asm/io.h> |
| #include <linux/spinlock.h> |
| |
| #include <linux/gpio.h> |
| |
| static char i2cspi_state[2],dus_state[3]; |
| spinlock_t reset_lock; |
| static spinlock_t gpio_lock; |
| |
| |
| void comcerto_rst_cntrl_set(unsigned int dev_rst_cntrl_bit) |
| { |
| unsigned long flags; |
| spin_lock_irqsave(&reset_lock, flags); |
| |
| __raw_writel((dev_rst_cntrl_bit | __raw_readl(DEVICE_RST_CNTRL)), DEVICE_RST_CNTRL); |
| |
| spin_unlock_irqrestore(&reset_lock,flags); |
| } |
| EXPORT_SYMBOL(comcerto_rst_cntrl_set); |
| |
| /* @ int block : Id of device block to be put in reset |
| * @ int state : State value 0->OUT-OF-RESET , 1->RESET. |
| * API for block reset to all the device blocks |
| * available for C2000 devices. |
| */ |
| void c2000_block_reset(int block,int state) |
| { |
| unsigned long flags; |
| spin_lock_irqsave(&reset_lock, flags); |
| |
| if(state){ |
| /* Code is to put the device block in RESET */ |
| switch (block) |
| { |
| case COMPONENT_AXI_RTC: |
| /* Put the Timer device(AXI clock domain) in reset state */ |
| writel(readl(AXI_RESET_1) | RTC_AXI_RESET_BIT, AXI_RESET_1); |
| break; |
| case COMPONENT_AXI_I2C: |
| i2cspi_state[0]=1; |
| goto i2cspi_rst; |
| case COMPONENT_AXI_LEGACY_SPI: |
| i2cspi_state[1]=1; |
| i2cspi_rst: |
| if(i2cspi_state[0] == 1 && i2cspi_state[1] == 1) |
| /* Put the I2C and LEGACY SPI(AXI clock domain) device in reset state */ |
| writel(readl(AXI_RESET_1) | I2CSPI_AXI_RESET_BIT, AXI_RESET_1); |
| break; |
| case COMPONENT_AXI_DMA: |
| dus_state[0]=1; |
| goto dus_rst; |
| case COMPONENT_AXI_FAST_UART: |
| dus_state[1]=1; |
| goto dus_rst; |
| case COMPONENT_AXI_FAST_SPI: |
| dus_state[2]=1; |
| dus_rst: |
| if(dus_state[0] == 1 && dus_state[1] == 1 && dus_state[2] == 1) |
| /* Put the DUS (AXI clock domain) device in reset state */ |
| writel(readl(AXI_RESET_1) | DUS_AXI_RESET_BIT, AXI_RESET_1); |
| break; |
| case COMPONENT_AXI_TDM: |
| /* Put the TDM(AXI clock domain) device in reset state */ |
| writel(readl(AXI_RESET_1) | TDM_AXI_RESET_BIT, AXI_RESET_1); |
| break; |
| case COMPONENT_PFE_SYS: |
| /* Put the PFE device in reset state */ |
| writel(readl(AXI_RESET_1) | PFE_SYS_AXI_RESET_BIT, AXI_RESET_1); |
| break; |
| case COMPONENT_AXI_IPSEC_EAPE: |
| /* Put the IPSEC EAPE (AXI clock domain) device in reset state */ |
| writel(readl(AXI_RESET_1) | IPSEC_EAPE_AXI_RESET_BIT, AXI_RESET_1); |
| break; |
| case COMPONENT_AXI_IPSEC_SPACC: |
| /* Put the IPSEC SPACC (AXI clock domain) device in reset state */ |
| writel(readl(AXI_RESET_1) | IPSEC_SPACC_AXI_RESET_BIT, AXI_RESET_1); |
| break; |
| case COMPONENT_AXI_DPI_CIE: |
| /* Put the DPI CIE (AXI clock domain) device in reset state */ |
| writel(readl(AXI_RESET_0) | DPI_CIE_AXI_RESET_BIT, AXI_RESET_0); |
| break; |
| case COMPONENT_AXI_DPI_DECOMP: |
| /* Put the DPI DECOMP (AXI clock domain) device in reset state */ |
| writel(readl(AXI_RESET_0) | DPI_DECOMP_AXI_RESET_BIT, AXI_RESET_0); |
| break; |
| case COMPONENT_AXI_USB0: |
| /* Put the USB0 device(AXI clock domain) in reset state */ |
| writel(readl(AXI_RESET_2) | USB0_AXI_RESET_BIT, AXI_RESET_2); |
| break; |
| case COMPONENT_UTMI_USB0: |
| /* Put the USB0 device(UTMI clock domain) in reset state */ |
| writel(readl(USB_RST_CNTRL) | USB0_UTMI_RESET_BIT, USB_RST_CNTRL); |
| break; |
| case COMPONENT_USB0_PHY: |
| /* Put the USB0_PHY device in reset state */ |
| writel(readl(USB_RST_CNTRL) | USB0_PHY_RESET_BIT, USB_RST_CNTRL); |
| break; |
| case COMPONENT_AXI_USB1: |
| /* Put the USB1 device in reset state */ |
| writel(readl(AXI_RESET_2) | USB1_AXI_RESET_BIT, AXI_RESET_2); |
| break; |
| case COMPONENT_UTMI_USB1: |
| /* Put the USB1 device(UTMI clock domain) in reset state */ |
| writel(readl(USB_RST_CNTRL) | USB1_UTMI_RESET_BIT, USB_RST_CNTRL); |
| break; |
| case COMPONENT_USB1_PHY: |
| /* Put the USB1_PHY device in reset state */ |
| writel(readl(USB_RST_CNTRL) | USB1_PHY_RESET_BIT, USB_RST_CNTRL); |
| break; |
| case COMPONENT_AXI_SATA: |
| /* Put the SATA device in reset state */ |
| writel(readl(AXI_RESET_2) | SATA_AXI_RESET_BIT, AXI_RESET_2); |
| break; |
| case COMPONENT_AXI_PCIE0: |
| /* Put the PCIE0 device in reset state */ |
| writel(readl(AXI_RESET_2) | PCIE0_AXI_RESET_BIT, AXI_RESET_2); |
| break; |
| case COMPONENT_AXI_PCIE1: |
| /* Put the PCIE1 device in reset state */ |
| writel(readl(AXI_RESET_2) | PCIE1_AXI_RESET_BIT, AXI_RESET_2); |
| break; |
| case COMPONENT_PFE_CORE: |
| /* Put the PFE core device in reset state */ |
| writel(readl(PFE_RESET) | PFE_CORE_RESET_BIT, PFE_RESET); |
| break; |
| case COMPONENT_IPSEC_EAPE_CORE: |
| /* Put the IPSEC EAPE core device in reset state */ |
| writel(readl(IPSEC_RESET) | IPSEC_EAPE_CORE_RESET_BIT, IPSEC_RESET); |
| break; |
| case COMPONENT_GEMTX: |
| /* Put the GEMTX device in reset state */ |
| writel(readl(GEMTX_RESET) | GEMTX_RESET_BIT , GEMTX_RESET); |
| break; |
| case COMPONENT_DECT: |
| /* Put the DECT device in reset state */ |
| writel(readl(DECT_RESET) | DECT_RESET_BIT , DECT_RESET); |
| break; |
| case COMPONENT_DDR_CNTLR: |
| /* Put the DDR controller device in reset state */ |
| writel(readl(DDR_RESET) | DDR_CNTRL_RESET_BIT , DDR_RESET); |
| break; |
| case COMPONENT_DDR_PHY: |
| /* Put the DDR PHY device in reset state */ |
| writel(readl(DDR_RESET) | DDR_PHY_RESET_BIT , DDR_RESET); |
| break; |
| case COMPONENT_SERDES0: |
| /* Put SERDES0 controller in Reset state */ |
| writel(readl(SERDES_RST_CNTRL) | SERDES0_RESET_BIT ,SERDES_RST_CNTRL); |
| break; |
| case COMPONENT_SERDES_PCIE0: |
| /* Put the PCIE0 SERDES controller in Reset state */ |
| writel(readl(PCIe_SATA_RST_CNTRL) | SERDES_PCIE0_RESET_BIT, PCIe_SATA_RST_CNTRL); |
| break; |
| case COMPONENT_SERDES1: |
| /* Put SERDES1 contrller 1 in reset state */ |
| writel(readl(SERDES_RST_CNTRL) | SERDES1_RESET_BIT ,SERDES_RST_CNTRL); |
| break; |
| case COMPONENT_SERDES_PCIE1: |
| /* Put PCIE1 serdes controller in reset state */ |
| writel(readl(PCIe_SATA_RST_CNTRL) | SERDES_PCIE1_RESET_BIT , PCIe_SATA_RST_CNTRL); |
| break; |
| case COMPONENT_SERDES_SATA0: |
| /* Put SATA0 serdes controller in reset state */ |
| writel(readl(PCIe_SATA_RST_CNTRL) | (SERDES_SATA0_RESET_BIT), PCIe_SATA_RST_CNTRL); |
| break; |
| case COMPONENT_SERDES2: |
| /* Put SERDES2 contrller in reset state */ |
| writel(readl(SERDES_RST_CNTRL) | SERDES2_RESET_BIT ,SERDES_RST_CNTRL); |
| break; |
| case COMPONENT_SERDES_SATA1: |
| /* Put SATA1 serdes controller in reset state */ |
| writel(readl(PCIe_SATA_RST_CNTRL) | SERDES_SATA1_RESET_BIT , PCIe_SATA_RST_CNTRL); |
| break; |
| case COMPONENT_SGMII: |
| /* Put SGMII serdes controller in reset state */ |
| writel(readl(SGMII_OCC_RESET) | (SGMII_RESET_BIT), SGMII_OCC_RESET); |
| break; |
| case COMPONENT_SATA_PMU: |
| /* Put the SATA PMU(Keep Alive clock) in Reset state */ |
| writel(readl(SATA_PMU_RESET) | SATA_PMU_RESET_BIT, SATA_PMU_RESET); |
| break; |
| case COMPONENT_SATA_OOB: |
| /* Put the SATA OOB in Reset state */ |
| writel(readl(SATA_OOB_RESET) | SATA_OOB_RESET_BIT, SATA_OOB_RESET); |
| break; |
| case COMPONENT_TDMNTG: |
| /* Put the TDMNTG in Reset state */ |
| writel(readl(TDMNTG_RESET) | TDMNTG_RESET_BIT, TDMNTG_RESET); |
| break; |
| default : |
| break; |
| } |
| }else{ |
| /* Code is to put the device block to Out of reset */ |
| switch (block) |
| { |
| case COMPONENT_AXI_RTC: |
| /* Put the Timer device in Out-Of-Reset state */ |
| writel(readl(AXI_RESET_1) & ~RTC_AXI_RESET_BIT, AXI_RESET_1); |
| break; |
| case COMPONENT_AXI_I2C: |
| i2cspi_state[0]=0; |
| goto i2cspi_outrst; |
| case COMPONENT_AXI_LEGACY_SPI: |
| i2cspi_state[1]=0; |
| i2cspi_outrst: |
| /* Put the I2C/SPI device in Out-Of-Reset state */ |
| writel(readl(AXI_RESET_1) & ~I2CSPI_AXI_RESET_BIT, AXI_RESET_1); |
| break; |
| case COMPONENT_AXI_DMA: |
| dus_state[0]=0; |
| goto dus_outrst; |
| case COMPONENT_AXI_FAST_UART: |
| dus_state[1]=0; |
| goto dus_outrst; |
| case COMPONENT_AXI_FAST_SPI: |
| dus_state[2]=0; |
| dus_outrst: |
| /* Put the DUS devices in Out-Of-Reset state */ |
| writel(readl(AXI_RESET_1) & ~DUS_AXI_RESET_BIT , AXI_RESET_1); |
| break; |
| case COMPONENT_AXI_TDM: |
| /* Put the TDM device in Out-Of-Reset state */ |
| writel(readl(AXI_RESET_1) & ~TDM_AXI_RESET_BIT, AXI_RESET_1); |
| break; |
| case COMPONENT_PFE_SYS: |
| /* Put the PFE System devices in Out-Of-Reset state */ |
| writel(readl(AXI_RESET_1) & ~PFE_SYS_AXI_RESET_BIT, AXI_RESET_1); |
| break; |
| case COMPONENT_AXI_IPSEC_EAPE: |
| /* Put the IPSEC EAPE devices in Out-Of-Reset state */ |
| writel(readl(AXI_RESET_1) & ~IPSEC_EAPE_AXI_RESET_BIT, AXI_RESET_1); |
| break; |
| case COMPONENT_AXI_IPSEC_SPACC: |
| /* Put the IPSEC SPACC devices in Out-Of-Reset state */ |
| writel(readl(AXI_RESET_1) & ~IPSEC_SPACC_AXI_RESET_BIT, AXI_RESET_1); |
| break; |
| case COMPONENT_AXI_DPI_CIE: |
| /* Put the DPI CIE devices in Out-Of-Reset state */ |
| writel(readl(AXI_RESET_0) & ~DPI_CIE_AXI_RESET_BIT, AXI_RESET_0); |
| break; |
| case COMPONENT_AXI_DPI_DECOMP: |
| /* Put the DPI DECOMP devices in Out-Of-Reset state */ |
| writel(readl(AXI_RESET_0) & ~DPI_DECOMP_AXI_RESET_BIT, AXI_RESET_0); |
| break; |
| case COMPONENT_AXI_USB0: |
| /* Put the USB0 device in Out-Of-Reset state */ |
| writel(readl(AXI_RESET_2) & ~USB0_AXI_RESET_BIT, AXI_RESET_2); |
| break; |
| case COMPONENT_UTMI_USB0: |
| /* Put the USB0 device(UTMI clock domain) in Out-Of-reset state */ |
| writel(readl(USB_RST_CNTRL) & ~USB0_UTMI_RESET_BIT, USB_RST_CNTRL); |
| break; |
| case COMPONENT_USB0_PHY: |
| /* Put the USB0_PHY devices in Out-Of-Reset state */ |
| writel(readl(USB_RST_CNTRL)& ~USB0_PHY_RESET_BIT, USB_RST_CNTRL); |
| break; |
| case COMPONENT_AXI_USB1: |
| /* Put the USB1 device in Out-Of-Reset state */ |
| writel(readl(AXI_RESET_2) & ~USB1_AXI_RESET_BIT, AXI_RESET_2); |
| break; |
| case COMPONENT_UTMI_USB1: |
| /* Put the USB1 device(UTMI clock domain) in Out-Of-reset state */ |
| writel(readl(USB_RST_CNTRL) & ~USB1_UTMI_RESET_BIT, USB_RST_CNTRL); |
| break; |
| case COMPONENT_USB1_PHY: |
| /* Put the USB1_PHY devices in Out-Of-Reset state */ |
| writel(readl(USB_RST_CNTRL)& ~USB1_PHY_RESET_BIT, USB_RST_CNTRL); |
| break; |
| case COMPONENT_AXI_SATA: |
| /* Put the SATA device in Out-Of-Reset state */ |
| writel(readl(AXI_RESET_2) & ~SATA_AXI_RESET_BIT, AXI_RESET_2); |
| break; |
| case COMPONENT_AXI_PCIE0: |
| /* Put the PCIE0 device in Out-Of-reset state */ |
| writel(readl(AXI_RESET_2) & ~PCIE0_AXI_RESET_BIT, AXI_RESET_2); |
| break; |
| case COMPONENT_AXI_PCIE1: |
| /* Put the PCIE1 device in Out-Of-Reset state */ |
| writel(readl(AXI_RESET_2) & ~PCIE1_AXI_RESET_BIT, AXI_RESET_2); |
| break; |
| case COMPONENT_PFE_CORE: |
| /* Put the PFE core device Out-Of-Reset state */ |
| writel(readl(PFE_RESET) & ~PFE_CORE_RESET_BIT, PFE_RESET); |
| break; |
| case COMPONENT_IPSEC_EAPE_CORE: |
| /* Put the IPSEC EAPE core device in Out-Of-Reset state */ |
| writel(readl(IPSEC_RESET) & ~IPSEC_EAPE_CORE_RESET_BIT, IPSEC_RESET); |
| break; |
| case COMPONENT_GEMTX: |
| /* Put the GEMTX device in Out-Of-Reset state */ |
| writel(readl(GEMTX_RESET) & ~GEMTX_RESET_BIT , GEMTX_RESET); |
| break; |
| case COMPONENT_DECT: |
| /* Put the DECT device in Out-Of-Reset state */ |
| writel(readl(DECT_RESET) & ~DECT_RESET_BIT , DECT_RESET); |
| break; |
| case COMPONENT_DDR_CNTLR: |
| /* Put the DDR controller device in Out-Of-Reset state */ |
| writel(readl(DDR_RESET) & ~DDR_CNTRL_RESET_BIT , DDR_RESET); |
| break; |
| case COMPONENT_DDR_PHY: |
| /* Put the DDR PHY device in Out-Of-Reset state */ |
| writel(readl(DDR_RESET) & ~DDR_PHY_RESET_BIT , DDR_RESET); |
| break; |
| case COMPONENT_SERDES0: |
| /* put the SERDES0 controller in Out-of-Reset state */ |
| writel(readl(SERDES_RST_CNTRL) & ~SERDES0_RESET_BIT ,SERDES_RST_CNTRL); |
| break; |
| case COMPONENT_SERDES_PCIE0: |
| /* Put the PCIE0 SERDES controller in Out-Of-Reset state */ |
| writel(readl(PCIe_SATA_RST_CNTRL) & ~SERDES_PCIE0_RESET_BIT, PCIe_SATA_RST_CNTRL); |
| break; |
| case COMPONENT_SERDES1: |
| /* Put SEDES1 controller in Out-Of-reset state */ |
| writel(readl(SERDES_RST_CNTRL)& ~SERDES1_RESET_BIT ,SERDES_RST_CNTRL); |
| break; |
| case COMPONENT_SERDES_PCIE1: |
| /* Put PCIE1 serdes controller in Out-Of-Reset state */ |
| writel(readl(PCIe_SATA_RST_CNTRL) & ~SERDES_PCIE1_RESET_BIT , PCIe_SATA_RST_CNTRL); |
| break; |
| case COMPONENT_SERDES_SATA0: |
| writel(readl(PCIe_SATA_RST_CNTRL) & ~SERDES_SATA0_RESET_BIT, PCIe_SATA_RST_CNTRL); |
| break; |
| case COMPONENT_SERDES2: |
| /* Put Serdes contrller 1 in Out-Of-Reset state */ |
| writel(readl(SERDES_RST_CNTRL) & ~SERDES2_RESET_BIT ,SERDES_RST_CNTRL); |
| break; |
| case COMPONENT_SERDES_SATA1: |
| /* Put SATA1 serdes controller in Out-Of-reset state */ |
| writel(readl(PCIe_SATA_RST_CNTRL) & ~SERDES_SATA1_RESET_BIT , PCIe_SATA_RST_CNTRL); |
| break; |
| case COMPONENT_SGMII: |
| /* Put the SGMII controller in Out-Of-Reset state */ |
| writel(readl(SGMII_OCC_RESET) & ~SGMII_RESET_BIT, SGMII_OCC_RESET); |
| break; |
| case COMPONENT_SATA_PMU: |
| /* Put the SATA PMU(KEEP ALIVE clock) in Out-Of-Reset state */ |
| writel(readl(SATA_PMU_RESET) & ~SATA_PMU_RESET_BIT , SATA_PMU_RESET); |
| break; |
| case COMPONENT_SATA_OOB: |
| /* Put the SATA OOB in Out-Of-Reset state */ |
| writel(readl(SATA_OOB_RESET) & ~SATA_OOB_RESET_BIT , SATA_OOB_RESET); |
| break; |
| case COMPONENT_TDMNTG: |
| /* Put the TDMNTG in Out-Of-Reset state */ |
| writel(readl(TDMNTG_RESET) & ~TDMNTG_RESET_BIT, TDMNTG_RESET); |
| break; |
| default : |
| break; |
| } |
| } |
| spin_unlock_irqrestore(&reset_lock,flags); |
| } |
| EXPORT_SYMBOL(c2000_block_reset); |
| |
| #if defined(CONFIG_C2K_MFCN_EVM) |
| void GPIO_reset_external_device(int block,int state) |
| { |
| unsigned long flags; |
| spin_lock_irqsave(&gpio_lock, flags); |
| |
| /* Blocks to be put in out of Reset and reset mode |
| * 0 ----> out of reset |
| * 1 ----> reset |
| */ |
| switch (block){ |
| case COMPONENT_ATHEROS_SWITCH: |
| if(gpio_request_one(GPIO_PIN_NUM_5, GPIOF_OUT_INIT_HIGH, GPIO_PIN_DESC_5)){ |
| printk(KERN_ERR "%s:%d: Cannot request gpio for gpio-%d\n", \ |
| __func__, __LINE__, GPIO_PIN_NUM_4); |
| return; |
| } |
| |
| if (state){ |
| gpio_set_value(GPIO_PIN_NUM_5, GPIO_SET_0); |
| |
| gpio_direction_input(GPIO_PIN_NUM_5); |
| }else{ |
| gpio_set_value(GPIO_PIN_NUM_5, GPIO_SET_0); |
| |
| gpio_direction_output(GPIO_PIN_NUM_5, GPIO_SET_0); |
| |
| gpio_set_value(GPIO_PIN_NUM_5, GPIO_SET_1); |
| } |
| |
| gpio_free(GPIO_PIN_NUM_5); |
| |
| break; |
| |
| case COMPONENT_SLIC: |
| if(gpio_request_one(GPIO_PIN_NUM_4, GPIOF_OUT_INIT_HIGH, GPIO_PIN_DESC_4)){ |
| printk(KERN_ERR "%s:%d: Cannot request gpio for gpio-%d\n", \ |
| __func__, __LINE__, GPIO_PIN_NUM_4); |
| return; |
| } |
| |
| if (state){ |
| gpio_set_value(GPIO_PIN_NUM_4, GPIO_SET_0); |
| |
| gpio_direction_input(GPIO_PIN_NUM_4); |
| }else{ |
| gpio_set_value(GPIO_PIN_NUM_4, GPIO_SET_0); |
| |
| gpio_direction_output(GPIO_PIN_NUM_4, GPIO_SET_0); |
| |
| gpio_set_value(GPIO_PIN_NUM_4, GPIO_SET_1); |
| } |
| |
| gpio_free(GPIO_PIN_NUM_4); |
| |
| break; |
| |
| case COMPONENT_PCIE0: |
| if (state){ |
| writel(readl(COMCERTO_GPIO_63_32_PIN_OUTPUT) & ~GPIO_PIN_48, COMCERTO_GPIO_63_32_PIN_OUTPUT); |
| writel( readl(COMCERTO_GPIO_63_32_PIN_OUTPUT_EN) | GPIO_PIN_48, COMCERTO_GPIO_63_32_PIN_OUTPUT_EN); |
| writel(readl(COMCERTO_GPIO_63_32_PIN_SELECT) & ~GPIO_PIN_48, COMCERTO_GPIO_63_32_PIN_SELECT); |
| }else{ |
| writel(readl(COMCERTO_GPIO_63_32_PIN_OUTPUT) & ~GPIO_PIN_48, COMCERTO_GPIO_63_32_PIN_OUTPUT); |
| writel( readl(COMCERTO_GPIO_63_32_PIN_OUTPUT_EN) & ~GPIO_PIN_48, COMCERTO_GPIO_63_32_PIN_OUTPUT_EN); |
| writel(readl(COMCERTO_GPIO_63_32_PIN_OUTPUT) | GPIO_PIN_48, COMCERTO_GPIO_63_32_PIN_OUTPUT); |
| writel(readl(COMCERTO_GPIO_63_32_PIN_SELECT) | GPIO_PIN_48, COMCERTO_GPIO_63_32_PIN_SELECT); |
| } |
| break; |
| case COMPONENT_PCIE1: |
| if (state){ |
| writel(readl(COMCERTO_GPIO_63_32_PIN_OUTPUT) & ~GPIO_PIN_47, COMCERTO_GPIO_63_32_PIN_OUTPUT); |
| writel( readl(COMCERTO_GPIO_63_32_PIN_OUTPUT_EN) | GPIO_PIN_47, COMCERTO_GPIO_63_32_PIN_OUTPUT_EN); |
| writel(readl(COMCERTO_GPIO_63_32_PIN_SELECT) & ~GPIO_PIN_47, COMCERTO_GPIO_63_32_PIN_SELECT); |
| }else{ |
| writel(readl(COMCERTO_GPIO_63_32_PIN_OUTPUT) & ~GPIO_PIN_47, COMCERTO_GPIO_63_32_PIN_OUTPUT); |
| writel( readl(COMCERTO_GPIO_63_32_PIN_OUTPUT_EN) & ~GPIO_PIN_47, COMCERTO_GPIO_63_32_PIN_OUTPUT_EN); |
| writel(readl(COMCERTO_GPIO_63_32_PIN_OUTPUT) | GPIO_PIN_47, COMCERTO_GPIO_63_32_PIN_OUTPUT); |
| writel(readl(COMCERTO_GPIO_63_32_PIN_SELECT) | GPIO_PIN_47, COMCERTO_GPIO_63_32_PIN_SELECT); |
| } |
| break; |
| case COMPONENT_USB_HUB: |
| if (state){ |
| writel(readl(COMCERTO_GPIO_63_32_PIN_OUTPUT) & ~GPIO_PIN_50, COMCERTO_GPIO_63_32_PIN_OUTPUT); |
| writel( readl(COMCERTO_GPIO_63_32_PIN_OUTPUT_EN) | GPIO_PIN_50, COMCERTO_GPIO_63_32_PIN_OUTPUT_EN); |
| writel(readl(COMCERTO_GPIO_63_32_PIN_SELECT) & ~GPIO_PIN_50, COMCERTO_GPIO_63_32_PIN_SELECT); |
| }else{ |
| writel(readl(COMCERTO_GPIO_63_32_PIN_OUTPUT) & ~GPIO_PIN_50, COMCERTO_GPIO_63_32_PIN_OUTPUT); |
| writel( readl(COMCERTO_GPIO_63_32_PIN_OUTPUT_EN) & ~GPIO_PIN_50, COMCERTO_GPIO_63_32_PIN_OUTPUT_EN); |
| writel(readl(COMCERTO_GPIO_63_32_PIN_OUTPUT) | GPIO_PIN_50, COMCERTO_GPIO_63_32_PIN_OUTPUT); |
| writel(readl(COMCERTO_GPIO_63_32_PIN_SELECT) | GPIO_PIN_50, COMCERTO_GPIO_63_32_PIN_SELECT); |
| } |
| break; |
| case COMPONENT_EXP_DAUGTHER_CARD: |
| if (state){ |
| writel(readl(COMCERTO_GPIO_63_32_PIN_OUTPUT) & ~GPIO_PIN_49, COMCERTO_GPIO_63_32_PIN_OUTPUT); |
| writel( readl(COMCERTO_GPIO_63_32_PIN_OUTPUT_EN) | GPIO_PIN_49, COMCERTO_GPIO_63_32_PIN_OUTPUT_EN); |
| writel(readl(COMCERTO_GPIO_63_32_PIN_SELECT) & ~GPIO_PIN_49, COMCERTO_GPIO_63_32_PIN_SELECT); |
| }else{ |
| writel(readl(COMCERTO_GPIO_63_32_PIN_OUTPUT) & ~GPIO_PIN_49, COMCERTO_GPIO_63_32_PIN_OUTPUT); |
| writel( readl(COMCERTO_GPIO_63_32_PIN_OUTPUT_EN) & ~GPIO_PIN_49, COMCERTO_GPIO_63_32_PIN_OUTPUT_EN); |
| writel(readl(COMCERTO_GPIO_63_32_PIN_OUTPUT) | GPIO_PIN_49, COMCERTO_GPIO_63_32_PIN_OUTPUT); |
| writel(readl(COMCERTO_GPIO_63_32_PIN_SELECT) | GPIO_PIN_49, COMCERTO_GPIO_63_32_PIN_SELECT); |
| } |
| break; |
| case COMPONENT_RGMII0: |
| if (state){ |
| writel(readl(COMCERTO_GPIO_63_32_PIN_OUTPUT) & ~GPIO_PIN_46, COMCERTO_GPIO_63_32_PIN_OUTPUT); |
| writel( readl(COMCERTO_GPIO_63_32_PIN_OUTPUT_EN) | GPIO_PIN_46, COMCERTO_GPIO_63_32_PIN_OUTPUT_EN); |
| writel(readl(COMCERTO_GPIO_63_32_PIN_SELECT) & ~GPIO_PIN_46, COMCERTO_GPIO_63_32_PIN_SELECT); |
| }else{ |
| writel(readl(COMCERTO_GPIO_63_32_PIN_OUTPUT) & ~GPIO_PIN_46, COMCERTO_GPIO_63_32_PIN_OUTPUT); |
| writel( readl(COMCERTO_GPIO_63_32_PIN_OUTPUT_EN) & ~GPIO_PIN_46, COMCERTO_GPIO_63_32_PIN_OUTPUT_EN); |
| writel(readl(COMCERTO_GPIO_63_32_PIN_OUTPUT) | GPIO_PIN_46, COMCERTO_GPIO_63_32_PIN_OUTPUT); |
| writel(readl(COMCERTO_GPIO_63_32_PIN_SELECT) | GPIO_PIN_46, COMCERTO_GPIO_63_32_PIN_SELECT); |
| } |
| break; |
| case COMPONENT_RGMII1: |
| if (state){ |
| writel(readl(COMCERTO_GPIO_63_32_PIN_OUTPUT) & ~GPIO_PIN_45, COMCERTO_GPIO_63_32_PIN_OUTPUT); |
| writel( readl(COMCERTO_GPIO_63_32_PIN_OUTPUT_EN) | GPIO_PIN_45, COMCERTO_GPIO_63_32_PIN_OUTPUT_EN); |
| writel(readl(COMCERTO_GPIO_63_32_PIN_SELECT)& ~GPIO_PIN_45, COMCERTO_GPIO_63_32_PIN_SELECT); |
| }else{ |
| writel(readl(COMCERTO_GPIO_63_32_PIN_OUTPUT) & ~GPIO_PIN_45, COMCERTO_GPIO_63_32_PIN_OUTPUT); |
| writel( readl(COMCERTO_GPIO_63_32_PIN_OUTPUT_EN) & ~GPIO_PIN_45, COMCERTO_GPIO_63_32_PIN_OUTPUT_EN); |
| writel(readl(COMCERTO_GPIO_63_32_PIN_OUTPUT) | GPIO_PIN_45, COMCERTO_GPIO_63_32_PIN_OUTPUT); |
| writel(readl(COMCERTO_GPIO_63_32_PIN_SELECT) | GPIO_PIN_45, COMCERTO_GPIO_63_32_PIN_SELECT); |
| } |
| break; |
| default: |
| break; |
| } |
| |
| spin_unlock_irqrestore(&gpio_lock,flags); |
| } |
| EXPORT_SYMBOL(GPIO_reset_external_device); |
| #endif |
| |
| void reset_init(void){ |
| |
| /*Initilize the DUS ,serde0/1/2 and I2CSPI dependancy values */ |
| i2cspi_state[0]=i2cspi_state[1]=dus_state[0]=dus_state[1]=dus_state[2]=0; |
| |
| spin_lock_init(&reset_lock); |
| |
| /* Do Any boottime Reset/Out-Of-Reset to devices if required*/ |
| } |