/** * This function is called from early boot process. * Therefore, it cannot use global variables. */ NvU32 NvOdmQueryMemSize(NvOdmMemoryType MemType) { NvOdmOsOsInfo Info; NvU32 SdramSize; NvU32 SdramBctCustOpt; switch (MemType) { // NOTE: // For Windows CE/WM operating systems the total size of SDRAM may // need to be reduced due to limitations in the virtual address map. // Under the legacy physical memory manager, Windows OSs have a // maximum 512MB statically mapped virtual address space. Under the // new physical memory manager, Windows OSs have a maximum 1GB // statically mapped virtual address space. Out of that virtual // address space, the upper 32 or 36 MB (depending upon the SOC) // of the virtual address space is reserved for SOC register // apertures. // // Refer to virtual_tables_apxx.arm for the reserved aperture list. // If the cumulative size of the reserved apertures changes, the // maximum size of SDRAM will also change. case NvOdmMemoryType_Sdram: { SdramBctCustOpt = GetBctKeyValue(); switch (NV_DRF_VAL(TEGRA_DEVKIT, BCT_SYSTEM, MEMORY, SdramBctCustOpt)) { case TEGRA_DEVKIT_BCT_SYSTEM_0_MEMORY_1: SdramSize = 0x10000000; //256 MB break; case TEGRA_DEVKIT_BCT_SYSTEM_0_MEMORY_3: SdramSize = 0x40000000; //1GB break; case TEGRA_DEVKIT_BCT_SYSTEM_0_MEMORY_2: case TEGRA_DEVKIT_BCT_SYSTEM_0_MEMORY_DEFAULT: default: SdramSize = 0x20000000; //512 MB break; } if ( NvOdmOsGetOsInformation(&Info) && ((Info.OsType!=NvOdmOsOs_Windows) || (Info.OsType==NvOdmOsOs_Windows && Info.MajorVersion>=7)) ) return SdramSize; // Legacy Physical Memory Manager: SdramSize MB - Carveout MB return (SdramSize - NvOdmQueryCarveoutSize()); } case NvOdmMemoryType_Nor: return 0x00400000; // 4 MB case NvOdmMemoryType_Nand: case NvOdmMemoryType_I2CEeprom: case NvOdmMemoryType_Hsmmc: case NvOdmMemoryType_Mio: default: return 0; } }
NvU32 NvOdmQueryCarveoutSize(void) { NvU32 CarveBctCustOpt = GetBctKeyValue(); switch (NV_DRF_VAL(TEGRA_DEVKIT, BCT_CARVEOUT, MEMORY, CarveBctCustOpt)) { case TEGRA_DEVKIT_BCT_CARVEOUT_0_MEMORY_1: return 0x00400000;// 4MB case TEGRA_DEVKIT_BCT_CARVEOUT_0_MEMORY_2: return 0x00800000;// 8MB case TEGRA_DEVKIT_BCT_CARVEOUT_0_MEMORY_3: return 0x00C00000;// 12MB case TEGRA_DEVKIT_BCT_CARVEOUT_0_MEMORY_4: return 0x01000000;// 16MB case TEGRA_DEVKIT_BCT_CARVEOUT_0_MEMORY_5: return 0x01400000;// 20MB case TEGRA_DEVKIT_BCT_CARVEOUT_0_MEMORY_6: return 0x01800000;// 24MB case TEGRA_DEVKIT_BCT_CARVEOUT_0_MEMORY_7: return 0x01C00000;// 28MB case TEGRA_DEVKIT_BCT_CARVEOUT_0_MEMORY_8: return 0x02000000; // 32 MB case TEGRA_DEVKIT_BCT_CARVEOUT_0_MEMORY_DEFAULT: default: return 0x04000000; // 64 MB } }
const NvOdmQueryDapPortConnection* NvOdmQueryDapPortGetConnectionTable( NvU32 ConnectionIndex) { static const NvOdmQueryDapPortConnection s_Property[] = { { NvOdmDapConnectionIndex_Music_Path, 2, { {NvOdmDapPort_I2s1, NvOdmDapPort_Dap1, NV_FALSE}, {NvOdmDapPort_Dap1, NvOdmDapPort_I2s1, NV_TRUE} } }, }; static const NvOdmQueryDapPortConnection s_Property_Ril_Emp_Rainbow[] = { { NvOdmDapConnectionIndex_Music_Path, 2, { {NvOdmDapPort_I2s1, NvOdmDapPort_Dap1, NV_FALSE}, {NvOdmDapPort_Dap1, NvOdmDapPort_I2s1, NV_TRUE} } }, // Voicecall without Bluetooth { NvOdmDapConnectionIndex_VoiceCall_NoBlueTooth, 2, { {NvOdmDapPort_Dap3, NvOdmDapPort_Dap2, NV_FALSE}, {NvOdmDapPort_Dap2, NvOdmDapPort_Dap3, NV_TRUE} } }, // Voicecall with Bluetooth { NvOdmDapConnectionIndex_VoiceCall_WithBlueTooth, 2, { {NvOdmDapPort_Dap4, NvOdmDapPort_Dap3, NV_TRUE}, {NvOdmDapPort_Dap3, NvOdmDapPort_Dap4, NV_FALSE} }}, }; NvU32 TableIndex = 0; NvU32 CustOpt = GetBctKeyValue(); switch (NV_DRF_VAL(TEGRA_DEVKIT, BCT_CUSTOPT, RIL, CustOpt)) { case TEGRA_DEVKIT_BCT_CUSTOPT_0_RIL_EMP_RAINBOW: case TEGRA_DEVKIT_BCT_CUSTOPT_0_RIL_EMP_RAINBOW_ULPI: case TEGRA_DEVKIT_BCT_CUSTOPT_0_RIL_IFX: { for( TableIndex = 0; TableIndex < NV_ARRAY_SIZE(s_Property_Ril_Emp_Rainbow); TableIndex++) { if (s_Property_Ril_Emp_Rainbow[TableIndex].UseIndex == ConnectionIndex) return &s_Property_Ril_Emp_Rainbow[TableIndex]; } } break; default: { for( TableIndex = 0; TableIndex < NV_ARRAY_SIZE(s_Property); TableIndex++) { if (s_Property[TableIndex].UseIndex == ConnectionIndex) return &s_Property[TableIndex]; } } break; } return NULL; }
const NvOdmQueryDapPortProperty * NvOdmQueryDapPortGetProperty( NvU32 DapPortId) { static const NvOdmQueryDapPortProperty s_Property[] = { { NvOdmDapPort_None, NvOdmDapPort_None, { 0, 0, 0, 0 } }, // I2S1 (DAC1) <-> DAP1 <-> HIFICODEC { NvOdmDapPort_I2s1, NvOdmDapPort_HifiCodecType, { 2, 16, 44100, NvOdmQueryI2sDataCommFormat_I2S } }, // Dap1 // I2S2 (DAC2) <-> DAP2 <-> VOICECODEC { NvOdmDapPort_I2s2, NvOdmDapPort_VoiceCodecType, {2, 16, 8000, NvOdmQueryI2sDataCommFormat_I2S } }, // Dap2 }; static const NvOdmQueryDapPortProperty s_Property_Ril_Emp_Rainbow[] = { { NvOdmDapPort_None, NvOdmDapPort_None, { 0, 0, 0, 0 } }, // I2S1 (DAC1) <-> DAP1 <-> HIFICODEC { NvOdmDapPort_I2s1, NvOdmDapPort_HifiCodecType, { 2, 16, 44100, NvOdmQueryI2sDataCommFormat_I2S } }, // Dap1 // I2S2 (DAC2) <-> DAP2 <-> VOICECODEC { NvOdmDapPort_I2s2, NvOdmDapPort_VoiceCodecType, {2, 16, 8000, NvOdmQueryI2sDataCommFormat_I2S } }, // Dap2 // I2S2 (DAC2) <-> DAP3 <-> BASEBAND { NvOdmDapPort_I2s2, NvOdmDapPort_BaseBand, {2, 16, 8000, NvOdmQueryI2sDataCommFormat_I2S } }, // Dap3 // I2S2 (DAC2) <-> DAP4 <-> BLUETOOTH { NvOdmDapPort_I2s2, NvOdmDapPort_BlueTooth, {2, 16, 8000, NvOdmQueryI2sDataCommFormat_I2S } }, // Dap4 }; NvU32 CustOpt = GetBctKeyValue(); switch (NV_DRF_VAL(TEGRA_DEVKIT, BCT_CUSTOPT, RIL, CustOpt)) { case TEGRA_DEVKIT_BCT_CUSTOPT_0_RIL_EMP_RAINBOW: case TEGRA_DEVKIT_BCT_CUSTOPT_0_RIL_EMP_RAINBOW_ULPI: case TEGRA_DEVKIT_BCT_CUSTOPT_0_RIL_IFX: if (DapPortId && DapPortId<NV_ARRAY_SIZE(s_Property_Ril_Emp_Rainbow)) return &s_Property_Ril_Emp_Rainbow[DapPortId]; break; default: if (DapPortId && DapPortId<NV_ARRAY_SIZE(s_Property)) return &s_Property[DapPortId]; break; } return NULL; }
NvOdmDebugConsole NvOdmQueryDebugConsole(void) { NvU32 CustOpt = GetBctKeyValue(); switch (NV_DRF_VAL(TEGRA_DEVKIT, BCT_CUSTOPT, CONSOLE, CustOpt)) { case TEGRA_DEVKIT_BCT_CUSTOPT_0_CONSOLE_DEFAULT: case TEGRA_DEVKIT_BCT_CUSTOPT_0_CONSOLE_DCC: return NvOdmDebugConsole_Dcc; case TEGRA_DEVKIT_BCT_CUSTOPT_0_CONSOLE_NONE: return NvOdmDebugConsole_None; case TEGRA_DEVKIT_BCT_CUSTOPT_0_CONSOLE_UART: return NvOdmDebugConsole_UartA + NV_DRF_VAL(TEGRA_DEVKIT, BCT_CUSTOPT, CONSOLE_OPTION, CustOpt); default: return NvOdmDebugConsole_None; } }
const NvOdmWakeupPadInfo *NvOdmQueryGetWakeupPadTable(NvU32 *pSize) { NvU32 CustOpt; if (pSize) *pSize = NV_ARRAY_SIZE(s_NvOdmWakeupPadInfo); CustOpt = GetBctKeyValue(); switch (NV_DRF_VAL(TEGRA_DEVKIT, BCT_CUSTOPT, RIL, CustOpt)) { case TEGRA_DEVKIT_BCT_CUSTOPT_0_RIL_EMP_RAINBOW: s_NvOdmWakeupPadInfo[24].enable = NV_TRUE; break; case TEGRA_DEVKIT_BCT_CUSTOPT_0_RIL_IFX: s_NvOdmWakeupPadInfo[13].enable = NV_TRUE; break; default: break; } return (const NvOdmWakeupPadInfo *) s_NvOdmWakeupPadInfo; }
NvOdmDownloadTransport NvOdmQueryDownloadTransport(void) { NvU32 CustOpt = GetBctKeyValue(); switch (NV_DRF_VAL(TEGRA_DEVKIT, BCT_CUSTOPT, TRANSPORT, CustOpt)) { case TEGRA_DEVKIT_BCT_CUSTOPT_0_TRANSPORT_NONE: return NvOdmDownloadTransport_None; case TEGRA_DEVKIT_BCT_CUSTOPT_0_TRANSPORT_USB: return NvOdmDownloadTransport_Usb; case TEGRA_DEVKIT_BCT_CUSTOPT_0_TRANSPORT_ETHERNET: switch (NV_DRF_VAL(TEGRA_DEVKIT, BCT_CUSTOPT, ETHERNET_OPTION, CustOpt)) { case TEGRA_DEVKIT_BCT_CUSTOPT_0_ETHERNET_OPTION_SPI: case TEGRA_DEVKIT_BCT_CUSTOPT_0_ETHERNET_OPTION_DEFAULT: default: return NvOdmDownloadTransport_SpiEthernet; } case TEGRA_DEVKIT_BCT_CUSTOPT_0_TRANSPORT_UART: switch (NV_DRF_VAL(TEGRA_DEVKIT, BCT_CUSTOPT, UART_OPTION, CustOpt)) { case TEGRA_DEVKIT_BCT_CUSTOPT_0_UART_OPTION_B: return NvOdmDownloadTransport_UartB; case TEGRA_DEVKIT_BCT_CUSTOPT_0_UART_OPTION_C: return NvOdmDownloadTransport_UartC; case TEGRA_DEVKIT_BCT_CUSTOPT_0_UART_OPTION_DEFAULT: case TEGRA_DEVKIT_BCT_CUSTOPT_0_UART_OPTION_A: default: return NvOdmDownloadTransport_UartA; } case TEGRA_DEVKIT_BCT_CUSTOPT_0_TRANSPORT_DEFAULT: default: return s_NvOdmQueryDownloadTransportSetting; } }
const NvOdmUsbProperty* NvOdmQueryGetUsbProperty(NvOdmIoModule OdmIoModule, NvU32 Instance) { #ifdef CONFIG_TEGRA_USB_VBUS_DETECT_BY_PMU #define NVODM_USE_INTERNAL_PHY_VBUS_DETECTION NV_FALSE #else #define NVODM_USE_INTERNAL_PHY_VBUS_DETECTION NV_TRUE #endif static const NvOdmUsbProperty Usb1Property = { NvOdmUsbInterfaceType_Utmi, (NvOdmUsbChargerType_SE0 | NvOdmUsbChargerType_SE1 | NvOdmUsbChargerType_SK), 20, NV_FALSE, #ifdef CONFIG_USB_TEGRA_OTG NvOdmUsbModeType_OTG, #else NvOdmUsbModeType_Device, #endif NvOdmUsbIdPinType_None, NvOdmUsbConnectorsMuxType_None, NV_FALSE }; static const NvOdmUsbProperty Usb2Property = { NvOdmUsbInterfaceType_UlpiExternalPhy, NvOdmUsbChargerType_UsbHost, 20, NVODM_USE_INTERNAL_PHY_VBUS_DETECTION, NvOdmUsbModeType_None, NvOdmUsbIdPinType_None, NvOdmUsbConnectorsMuxType_None, NV_FALSE }; static const NvOdmUsbProperty Usb2NullPhyProperty = { NvOdmUsbInterfaceType_UlpiNullPhy, NvOdmUsbChargerType_UsbHost, 20, NVODM_USE_INTERNAL_PHY_VBUS_DETECTION, NvOdmUsbModeType_Host, NvOdmUsbIdPinType_None, NvOdmUsbConnectorsMuxType_None, NV_FALSE, {10, 1, 1, 1} }; static const NvOdmUsbProperty Usb3Property = { NvOdmUsbInterfaceType_Utmi, NvOdmUsbChargerType_UsbHost, 20, NVODM_USE_INTERNAL_PHY_VBUS_DETECTION, NvOdmUsbModeType_Host, NvOdmUsbIdPinType_None, NvOdmUsbConnectorsMuxType_None, NV_FALSE }; /* E1108 has no ID pin for USB3, so disable USB3 Host */ static const NvOdmUsbProperty Usb3Property_E1108 = { NvOdmUsbInterfaceType_Utmi, NvOdmUsbChargerType_UsbHost, 20, NVODM_USE_INTERNAL_PHY_VBUS_DETECTION, NvOdmUsbModeType_None, NvOdmUsbIdPinType_None, NvOdmUsbConnectorsMuxType_None, NV_FALSE }; if (OdmIoModule == NvOdmIoModule_Usb && Instance == 0) return &(Usb1Property); if (OdmIoModule == NvOdmIoModule_Usb && Instance == 1) { NvU32 CustOpt = GetBctKeyValue(); if (NV_DRF_VAL(TEGRA_DEVKIT, BCT_CUSTOPT, RIL, CustOpt) == TEGRA_DEVKIT_BCT_CUSTOPT_0_RIL_EMP_RAINBOW_ULPI) return &(Usb2NullPhyProperty); else return &(Usb2Property); } if (OdmIoModule == NvOdmIoModule_Usb && Instance == 2) { NvOdmBoardInfo BoardInfo; if (NvOdmPeripheralGetBoardInfo(BOARD_ID_WHISTLER_E1108, &BoardInfo)) { return &(Usb3Property_E1108); } else { return &(Usb3Property); } } return (const NvOdmUsbProperty *)NULL; }