| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941 |
- /* Copyright Statement:
- *
- * This software/firmware and related documentation ("MediaTek Software") are
- * protected under relevant copyright laws. The information contained herein is
- * confidential and proprietary to MediaTek Inc. and/or its licensors. Without
- * the prior written permission of MediaTek inc. and/or its licensors, any
- * reproduction, modification, use or disclosure of MediaTek Software, and
- * information contained herein, in whole or in part, shall be strictly
- * prohibited.
- *
- * MediaTek Inc. (C) 2019. All rights reserved.
- *
- * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
- * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
- * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
- * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
- * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
- * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
- * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
- * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
- * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
- * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
- * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
- * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
- * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
- * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
- * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
- * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
- * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
- * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
- *
- * The following software/firmware and/or related documentation ("MediaTek
- * Software") have been modified by MediaTek Inc. All revisions are subject to
- * any receiver's applicable license agreements with MediaTek Inc.
- */
- /*
- * MTK SPMI Driver
- *
- * Copyright 2018 MediaTek Co.,Ltd.
- *
- * DESCRIPTION:
- * This file provides API for other drivers to access PMIC registers
- *
- */
- #include <pmif.h>
- #include <spmi.h>
- #include <spmi_sw.h>
- #include <pmif_sw.h>
- #include <mt6315_upmu_hw.h>
- #if !SPMI_NO_PMIC
- #if (SPMI_CTP)
- #define sprintf FormatString
- #endif
- enum pmif_dbg_regs {
- PMIF_INIT_DONE,
- PMIF_INF_BUSY_STA,
- PMIF_OTHER_BUSY_STA_0,
- PMIF_OTHER_BUSY_STA_1,
- PMIF_IRQ_EVENT_EN_0,
- PMIF_IRQ_FLAG_0,
- PMIF_IRQ_CLR_0,
- PMIF_IRQ_EVENT_EN_1,
- PMIF_IRQ_FLAG_1,
- PMIF_IRQ_CLR_1,
- PMIF_IRQ_EVENT_EN_2,
- PMIF_IRQ_FLAG_2,
- PMIF_IRQ_CLR_2,
- PMIF_IRQ_EVENT_EN_3,
- PMIF_IRQ_FLAG_3,
- PMIF_IRQ_CLR_3,
- PMIF_IRQ_EVENT_EN_4,
- PMIF_IRQ_FLAG_4,
- PMIF_IRQ_CLR_4,
- PMIF_WDT_EVENT_EN_0,
- PMIF_WDT_FLAG_0,
- PMIF_WDT_EVENT_EN_1,
- PMIF_WDT_FLAG_1,
- PMIF_MONITOR_CTRL,
- PMIF_MONITOR_TARGET_CHAN_0,
- PMIF_MONITOR_TARGET_CHAN_1,
- PMIF_MONITOR_TARGET_CHAN_2,
- PMIF_MONITOR_TARGET_CHAN_3,
- PMIF_MONITOR_TARGET_CHAN_4,
- PMIF_MONITOR_TARGET_CHAN_5,
- PMIF_MONITOR_TARGET_CHAN_6,
- PMIF_MONITOR_TARGET_CHAN_7,
- PMIF_MONITOR_TARGET_WRITE,
- PMIF_MONITOR_TARGET_ADDR_0,
- PMIF_MONITOR_TARGET_ADDR_1,
- PMIF_MONITOR_TARGET_ADDR_2,
- PMIF_MONITOR_TARGET_ADDR_3,
- PMIF_MONITOR_TARGET_ADDR_4,
- PMIF_MONITOR_TARGET_ADDR_5,
- PMIF_MONITOR_TARGET_ADDR_6,
- PMIF_MONITOR_TARGET_ADDR_7,
- PMIF_MONITOR_TARGET_WDATA_0,
- PMIF_MONITOR_TARGET_WDATA_1,
- PMIF_MONITOR_TARGET_WDATA_2,
- PMIF_MONITOR_TARGET_WDATA_3,
- PMIF_MONITOR_TARGET_WDATA_4,
- PMIF_MONITOR_TARGET_WDATA_5,
- PMIF_MONITOR_TARGET_WDATA_6,
- PMIF_MONITOR_TARGET_WDATA_7,
- PMIF_MONITOR_STA,
- PMIF_MONITOR_RECORD_0_0,
- PMIF_MONITOR_RECORD_0_1,
- PMIF_MONITOR_RECORD_0_2,
- PMIF_MONITOR_RECORD_0_3,
- PMIF_MONITOR_RECORD_0_4,
- PMIF_MONITOR_RECORD_1_0,
- PMIF_MONITOR_RECORD_1_1,
- PMIF_MONITOR_RECORD_1_2,
- PMIF_MONITOR_RECORD_1_3,
- PMIF_MONITOR_RECORD_1_4,
- PMIF_MONITOR_RECORD_2_0,
- PMIF_MONITOR_RECORD_2_1,
- PMIF_MONITOR_RECORD_2_2,
- PMIF_MONITOR_RECORD_2_3,
- PMIF_MONITOR_RECORD_2_4,
- PMIF_MONITOR_RECORD_3_0,
- PMIF_MONITOR_RECORD_3_1,
- PMIF_MONITOR_RECORD_3_2,
- PMIF_MONITOR_RECORD_3_3,
- PMIF_MONITOR_RECORD_3_4,
- PMIF_MONITOR_RECORD_4_0,
- PMIF_MONITOR_RECORD_4_1,
- PMIF_MONITOR_RECORD_4_2,
- PMIF_MONITOR_RECORD_4_3,
- PMIF_MONITOR_RECORD_4_4,
- PMIF_MONITOR_RECORD_5_0,
- PMIF_MONITOR_RECORD_5_1,
- PMIF_MONITOR_RECORD_5_2,
- PMIF_MONITOR_RECORD_5_3,
- PMIF_MONITOR_RECORD_5_4,
- PMIF_MONITOR_RECORD_6_0,
- PMIF_MONITOR_RECORD_6_1,
- PMIF_MONITOR_RECORD_6_2,
- PMIF_MONITOR_RECORD_6_3,
- PMIF_MONITOR_RECORD_6_4,
- PMIF_MONITOR_RECORD_7_0,
- PMIF_MONITOR_RECORD_7_1,
- PMIF_MONITOR_RECORD_7_2,
- PMIF_MONITOR_RECORD_7_3,
- PMIF_MONITOR_RECORD_7_4,
- PMIF_MONITOR_RECORD_8_0,
- PMIF_MONITOR_RECORD_8_1,
- PMIF_MONITOR_RECORD_8_2,
- PMIF_MONITOR_RECORD_8_3,
- PMIF_MONITOR_RECORD_8_4,
- PMIF_MONITOR_RECORD_9_0,
- PMIF_MONITOR_RECORD_9_1,
- PMIF_MONITOR_RECORD_9_2,
- PMIF_MONITOR_RECORD_9_3,
- PMIF_MONITOR_RECORD_9_4,
- PMIF_MONITOR_RECORD_10_0,
- PMIF_MONITOR_RECORD_10_1,
- PMIF_MONITOR_RECORD_10_2,
- PMIF_MONITOR_RECORD_10_3,
- PMIF_MONITOR_RECORD_10_4,
- PMIF_MONITOR_RECORD_11_0,
- PMIF_MONITOR_RECORD_11_1,
- PMIF_MONITOR_RECORD_11_2,
- PMIF_MONITOR_RECORD_11_3,
- PMIF_MONITOR_RECORD_11_4,
- PMIF_MONITOR_RECORD_12_0,
- PMIF_MONITOR_RECORD_12_1,
- PMIF_MONITOR_RECORD_12_2,
- PMIF_MONITOR_RECORD_12_3,
- PMIF_MONITOR_RECORD_12_4,
- PMIF_MONITOR_RECORD_13_0,
- PMIF_MONITOR_RECORD_13_1,
- PMIF_MONITOR_RECORD_13_2,
- PMIF_MONITOR_RECORD_13_3,
- PMIF_MONITOR_RECORD_13_4,
- PMIF_MONITOR_RECORD_14_0,
- PMIF_MONITOR_RECORD_14_1,
- PMIF_MONITOR_RECORD_14_2,
- PMIF_MONITOR_RECORD_14_3,
- PMIF_MONITOR_RECORD_14_4,
- PMIF_MONITOR_RECORD_15_0,
- PMIF_MONITOR_RECORD_15_1,
- PMIF_MONITOR_RECORD_15_2,
- PMIF_MONITOR_RECORD_15_3,
- PMIF_MONITOR_RECORD_15_4,
- PMIF_MONITOR_RECORD_16_0,
- PMIF_MONITOR_RECORD_16_1,
- PMIF_MONITOR_RECORD_16_2,
- PMIF_MONITOR_RECORD_16_3,
- PMIF_MONITOR_RECORD_16_4,
- PMIF_MONITOR_RECORD_17_0,
- PMIF_MONITOR_RECORD_17_1,
- PMIF_MONITOR_RECORD_17_2,
- PMIF_MONITOR_RECORD_17_3,
- PMIF_MONITOR_RECORD_17_4,
- PMIF_MONITOR_RECORD_18_0,
- PMIF_MONITOR_RECORD_18_1,
- PMIF_MONITOR_RECORD_18_2,
- PMIF_MONITOR_RECORD_18_3,
- PMIF_MONITOR_RECORD_18_4,
- PMIF_MONITOR_RECORD_19_0,
- PMIF_MONITOR_RECORD_19_1,
- PMIF_MONITOR_RECORD_19_2,
- PMIF_MONITOR_RECORD_19_3,
- PMIF_MONITOR_RECORD_19_4,
- PMIF_MONITOR_RECORD_20_0,
- PMIF_MONITOR_RECORD_20_1,
- PMIF_MONITOR_RECORD_20_2,
- PMIF_MONITOR_RECORD_20_3,
- PMIF_MONITOR_RECORD_20_4,
- PMIF_MONITOR_RECORD_21_0,
- PMIF_MONITOR_RECORD_21_1,
- PMIF_MONITOR_RECORD_21_2,
- PMIF_MONITOR_RECORD_21_3,
- PMIF_MONITOR_RECORD_21_4,
- PMIF_MONITOR_RECORD_22_0,
- PMIF_MONITOR_RECORD_22_1,
- PMIF_MONITOR_RECORD_22_2,
- PMIF_MONITOR_RECORD_22_3,
- PMIF_MONITOR_RECORD_22_4,
- PMIF_MONITOR_RECORD_23_0,
- PMIF_MONITOR_RECORD_23_1,
- PMIF_MONITOR_RECORD_23_2,
- PMIF_MONITOR_RECORD_23_3,
- PMIF_MONITOR_RECORD_23_4,
- PMIF_MONITOR_RECORD_24_0,
- PMIF_MONITOR_RECORD_24_1,
- PMIF_MONITOR_RECORD_24_2,
- PMIF_MONITOR_RECORD_24_3,
- PMIF_MONITOR_RECORD_24_4,
- PMIF_MONITOR_RECORD_25_0,
- PMIF_MONITOR_RECORD_25_1,
- PMIF_MONITOR_RECORD_25_2,
- PMIF_MONITOR_RECORD_25_3,
- PMIF_MONITOR_RECORD_25_4,
- PMIF_MONITOR_RECORD_26_0,
- PMIF_MONITOR_RECORD_26_1,
- PMIF_MONITOR_RECORD_26_2,
- PMIF_MONITOR_RECORD_26_3,
- PMIF_MONITOR_RECORD_26_4,
- PMIF_MONITOR_RECORD_27_0,
- PMIF_MONITOR_RECORD_27_1,
- PMIF_MONITOR_RECORD_27_2,
- PMIF_MONITOR_RECORD_27_3,
- PMIF_MONITOR_RECORD_27_4,
- PMIF_MONITOR_RECORD_28_0,
- PMIF_MONITOR_RECORD_28_1,
- PMIF_MONITOR_RECORD_28_2,
- PMIF_MONITOR_RECORD_28_3,
- PMIF_MONITOR_RECORD_28_4,
- PMIF_MONITOR_RECORD_29_0,
- PMIF_MONITOR_RECORD_29_1,
- PMIF_MONITOR_RECORD_29_2,
- PMIF_MONITOR_RECORD_29_3,
- PMIF_MONITOR_RECORD_29_4,
- PMIF_MONITOR_RECORD_30_0,
- PMIF_MONITOR_RECORD_30_1,
- PMIF_MONITOR_RECORD_30_2,
- PMIF_MONITOR_RECORD_30_3,
- PMIF_MONITOR_RECORD_30_4,
- PMIF_MONITOR_RECORD_31_0,
- PMIF_MONITOR_RECORD_31_1,
- PMIF_MONITOR_RECORD_31_2,
- PMIF_MONITOR_RECORD_31_3,
- PMIF_MONITOR_RECORD_31_4,
- PMIF_DEBUG_CTRL,
- PMIF_RESERVED_0,
- PMIF_SWINF_0_ACC,
- PMIF_SWINF_0_WDATA_31_0,
- PMIF_SWINF_0_WDATA_63_32,
- PMIF_SWINF_0_RDATA_31_0,
- PMIF_SWINF_0_RDATA_63_32,
- PMIF_SWINF_0_VLD_CLR,
- PMIF_SWINF_0_STA,
- PMIF_SWINF_1_ACC,
- PMIF_SWINF_1_WDATA_31_0,
- PMIF_SWINF_1_WDATA_63_32,
- PMIF_SWINF_1_RDATA_31_0,
- PMIF_SWINF_1_RDATA_63_32,
- PMIF_SWINF_1_VLD_CLR,
- PMIF_SWINF_1_STA,
- PMIF_SWINF_2_ACC,
- PMIF_SWINF_2_WDATA_31_0,
- PMIF_SWINF_2_WDATA_63_32,
- PMIF_SWINF_2_RDATA_31_0,
- PMIF_SWINF_2_RDATA_63_32,
- PMIF_SWINF_2_VLD_CLR,
- PMIF_SWINF_2_STA,
- PMIF_SWINF_3_ACC,
- PMIF_SWINF_3_WDATA_31_0,
- PMIF_SWINF_3_WDATA_63_32,
- PMIF_SWINF_3_RDATA_31_0,
- PMIF_SWINF_3_RDATA_63_32,
- PMIF_SWINF_3_VLD_CLR,
- PMIF_SWINF_3_STA,
- };
- static int mt6xxx_pmif_dbg_regs[] = {
- [PMIF_INIT_DONE] = 0x0000,
- [PMIF_INF_BUSY_STA] = 0x0018,
- [PMIF_OTHER_BUSY_STA_0] = 0x001C,
- [PMIF_OTHER_BUSY_STA_1] = 0x0020,
- [PMIF_IRQ_EVENT_EN_0] = 0x0418,
- [PMIF_IRQ_FLAG_0] = 0x0420,
- [PMIF_IRQ_CLR_0] = 0x0424,
- [PMIF_IRQ_EVENT_EN_1] = 0x0428,
- [PMIF_IRQ_FLAG_1] = 0x0430,
- [PMIF_IRQ_CLR_1] = 0x0434,
- [PMIF_IRQ_EVENT_EN_2] = 0x0438,
- [PMIF_IRQ_FLAG_2] = 0x0440,
- [PMIF_IRQ_CLR_2] = 0x0444,
- [PMIF_IRQ_EVENT_EN_3] = 0x0448,
- [PMIF_IRQ_FLAG_3] = 0x0450,
- [PMIF_IRQ_CLR_3] = 0x0454,
- [PMIF_IRQ_EVENT_EN_4] = 0x0458,
- [PMIF_IRQ_FLAG_4] = 0x0460,
- [PMIF_IRQ_CLR_4] = 0x0464,
- [PMIF_WDT_EVENT_EN_0] = 0x046C,
- [PMIF_WDT_FLAG_0] = 0x0470,
- [PMIF_WDT_EVENT_EN_1] = 0x0474,
- [PMIF_WDT_FLAG_1] = 0x0478,
- [PMIF_MONITOR_CTRL] = 0x047C,
- [PMIF_MONITOR_TARGET_CHAN_0] = 0x0480,
- [PMIF_MONITOR_TARGET_CHAN_1] = 0x0484,
- [PMIF_MONITOR_TARGET_CHAN_2] = 0x0488,
- [PMIF_MONITOR_TARGET_CHAN_3] = 0x048C,
- [PMIF_MONITOR_TARGET_CHAN_4] = 0x0490,
- [PMIF_MONITOR_TARGET_CHAN_5] = 0x0494,
- [PMIF_MONITOR_TARGET_CHAN_6] = 0x0498,
- [PMIF_MONITOR_TARGET_CHAN_7] = 0x049C,
- [PMIF_MONITOR_TARGET_WRITE] = 0x04A0,
- [PMIF_MONITOR_TARGET_ADDR_0] = 0x04A4,
- [PMIF_MONITOR_TARGET_ADDR_1] = 0x04A8,
- [PMIF_MONITOR_TARGET_ADDR_2] = 0x04AC,
- [PMIF_MONITOR_TARGET_ADDR_3] = 0x04B0,
- [PMIF_MONITOR_TARGET_ADDR_4] = 0x04B4,
- [PMIF_MONITOR_TARGET_ADDR_5] = 0x04B8,
- [PMIF_MONITOR_TARGET_ADDR_6] = 0x04BC,
- [PMIF_MONITOR_TARGET_ADDR_7] = 0x04C0,
- [PMIF_MONITOR_TARGET_WDATA_0] = 0x04C4,
- [PMIF_MONITOR_TARGET_WDATA_1] = 0x04C8,
- [PMIF_MONITOR_TARGET_WDATA_2] = 0x04CC,
- [PMIF_MONITOR_TARGET_WDATA_3] = 0x04D0,
- [PMIF_MONITOR_TARGET_WDATA_4] = 0x04D4,
- [PMIF_MONITOR_TARGET_WDATA_5] = 0x04D8,
- [PMIF_MONITOR_TARGET_WDATA_6] = 0x04DC,
- [PMIF_MONITOR_TARGET_WDATA_7] = 0x04E0,
- [PMIF_MONITOR_STA] = 0x04E4,
- [PMIF_MONITOR_RECORD_0_0] = 0x04E8,
- [PMIF_MONITOR_RECORD_0_1] = 0x04EC,
- [PMIF_MONITOR_RECORD_0_2] = 0x04F0,
- [PMIF_MONITOR_RECORD_0_3] = 0x04F4,
- [PMIF_MONITOR_RECORD_0_4] = 0x04F8,
- [PMIF_MONITOR_RECORD_1_0] = 0x04FC,
- [PMIF_MONITOR_RECORD_1_1] = 0x0500,
- [PMIF_MONITOR_RECORD_1_2] = 0x0504,
- [PMIF_MONITOR_RECORD_1_3] = 0x0508,
- [PMIF_MONITOR_RECORD_1_4] = 0x050C,
- [PMIF_MONITOR_RECORD_2_0] = 0x0510,
- [PMIF_MONITOR_RECORD_2_1] = 0x0514,
- [PMIF_MONITOR_RECORD_2_2] = 0x0518,
- [PMIF_MONITOR_RECORD_2_3] = 0x051C,
- [PMIF_MONITOR_RECORD_2_4] = 0x0520,
- [PMIF_MONITOR_RECORD_3_0] = 0x0524,
- [PMIF_MONITOR_RECORD_3_1] = 0x0528,
- [PMIF_MONITOR_RECORD_3_2] = 0x052C,
- [PMIF_MONITOR_RECORD_3_3] = 0x0530,
- [PMIF_MONITOR_RECORD_3_4] = 0x0534,
- [PMIF_MONITOR_RECORD_4_0] = 0x0538,
- [PMIF_MONITOR_RECORD_4_1] = 0x053C,
- [PMIF_MONITOR_RECORD_4_2] = 0x0540,
- [PMIF_MONITOR_RECORD_4_3] = 0x0544,
- [PMIF_MONITOR_RECORD_4_4] = 0x0548,
- [PMIF_MONITOR_RECORD_5_0] = 0x054C,
- [PMIF_MONITOR_RECORD_5_1] = 0x0550,
- [PMIF_MONITOR_RECORD_5_2] = 0x0554,
- [PMIF_MONITOR_RECORD_5_3] = 0x0558,
- [PMIF_MONITOR_RECORD_5_4] = 0x055C,
- [PMIF_MONITOR_RECORD_6_0] = 0x0560,
- [PMIF_MONITOR_RECORD_6_1] = 0x0564,
- [PMIF_MONITOR_RECORD_6_2] = 0x0568,
- [PMIF_MONITOR_RECORD_6_3] = 0x056C,
- [PMIF_MONITOR_RECORD_6_4] = 0x0570,
- [PMIF_MONITOR_RECORD_7_0] = 0x0574,
- [PMIF_MONITOR_RECORD_7_1] = 0x0578,
- [PMIF_MONITOR_RECORD_7_2] = 0x057C,
- [PMIF_MONITOR_RECORD_7_3] = 0x0580,
- [PMIF_MONITOR_RECORD_7_4] = 0x0584,
- [PMIF_MONITOR_RECORD_8_0] = 0x0588,
- [PMIF_MONITOR_RECORD_8_1] = 0x058C,
- [PMIF_MONITOR_RECORD_8_2] = 0x0590,
- [PMIF_MONITOR_RECORD_8_3] = 0x0594,
- [PMIF_MONITOR_RECORD_8_4] = 0x0598,
- [PMIF_MONITOR_RECORD_9_0] = 0x059C,
- [PMIF_MONITOR_RECORD_9_1] = 0x05A0,
- [PMIF_MONITOR_RECORD_9_2] = 0x05A4,
- [PMIF_MONITOR_RECORD_9_3] = 0x05A8,
- [PMIF_MONITOR_RECORD_9_4] = 0x05AC,
- [PMIF_MONITOR_RECORD_10_0] = 0x05B0,
- [PMIF_MONITOR_RECORD_10_1] = 0x05B4,
- [PMIF_MONITOR_RECORD_10_2] = 0x05B8,
- [PMIF_MONITOR_RECORD_10_3] = 0x05BC,
- [PMIF_MONITOR_RECORD_10_4] = 0x05C0,
- [PMIF_MONITOR_RECORD_11_0] = 0x05C4,
- [PMIF_MONITOR_RECORD_11_1] = 0x05C8,
- [PMIF_MONITOR_RECORD_11_2] = 0x05CC,
- [PMIF_MONITOR_RECORD_11_3] = 0x05D0,
- [PMIF_MONITOR_RECORD_11_4] = 0x05D4,
- [PMIF_MONITOR_RECORD_12_0] = 0x05D8,
- [PMIF_MONITOR_RECORD_12_1] = 0x05DC,
- [PMIF_MONITOR_RECORD_12_2] = 0x05E0,
- [PMIF_MONITOR_RECORD_12_3] = 0x05E4,
- [PMIF_MONITOR_RECORD_12_4] = 0x05E8,
- [PMIF_MONITOR_RECORD_13_0] = 0x05EC,
- [PMIF_MONITOR_RECORD_13_1] = 0x05F0,
- [PMIF_MONITOR_RECORD_13_2] = 0x05F4,
- [PMIF_MONITOR_RECORD_13_3] = 0x05F8,
- [PMIF_MONITOR_RECORD_13_4] = 0x05FC,
- [PMIF_MONITOR_RECORD_14_0] = 0x0600,
- [PMIF_MONITOR_RECORD_14_1] = 0x0604,
- [PMIF_MONITOR_RECORD_14_2] = 0x0608,
- [PMIF_MONITOR_RECORD_14_3] = 0x060C,
- [PMIF_MONITOR_RECORD_14_4] = 0x0610,
- [PMIF_MONITOR_RECORD_15_0] = 0x0614,
- [PMIF_MONITOR_RECORD_15_1] = 0x0618,
- [PMIF_MONITOR_RECORD_15_2] = 0x061C,
- [PMIF_MONITOR_RECORD_15_3] = 0x0620,
- [PMIF_MONITOR_RECORD_15_4] = 0x0624,
- [PMIF_MONITOR_RECORD_16_0] = 0x0628,
- [PMIF_MONITOR_RECORD_16_1] = 0x062C,
- [PMIF_MONITOR_RECORD_16_2] = 0x0630,
- [PMIF_MONITOR_RECORD_16_3] = 0x0634,
- [PMIF_MONITOR_RECORD_16_4] = 0x0638,
- [PMIF_MONITOR_RECORD_17_0] = 0x063C,
- [PMIF_MONITOR_RECORD_17_1] = 0x0640,
- [PMIF_MONITOR_RECORD_17_2] = 0x0644,
- [PMIF_MONITOR_RECORD_17_3] = 0x0648,
- [PMIF_MONITOR_RECORD_17_4] = 0x064C,
- [PMIF_MONITOR_RECORD_18_0] = 0x0650,
- [PMIF_MONITOR_RECORD_18_1] = 0x0654,
- [PMIF_MONITOR_RECORD_18_2] = 0x0658,
- [PMIF_MONITOR_RECORD_18_3] = 0x065C,
- [PMIF_MONITOR_RECORD_18_4] = 0x0660,
- [PMIF_MONITOR_RECORD_19_0] = 0x0664,
- [PMIF_MONITOR_RECORD_19_1] = 0x0668,
- [PMIF_MONITOR_RECORD_19_2] = 0x066C,
- [PMIF_MONITOR_RECORD_19_3] = 0x0670,
- [PMIF_MONITOR_RECORD_19_4] = 0x0674,
- [PMIF_MONITOR_RECORD_20_0] = 0x0678,
- [PMIF_MONITOR_RECORD_20_1] = 0x067C,
- [PMIF_MONITOR_RECORD_20_2] = 0x0680,
- [PMIF_MONITOR_RECORD_20_3] = 0x0684,
- [PMIF_MONITOR_RECORD_20_4] = 0x0688,
- [PMIF_MONITOR_RECORD_21_0] = 0x068C,
- [PMIF_MONITOR_RECORD_21_1] = 0x0690,
- [PMIF_MONITOR_RECORD_21_2] = 0x0694,
- [PMIF_MONITOR_RECORD_21_3] = 0x0698,
- [PMIF_MONITOR_RECORD_21_4] = 0x069C,
- [PMIF_MONITOR_RECORD_22_0] = 0x06A0,
- [PMIF_MONITOR_RECORD_22_1] = 0x06A4,
- [PMIF_MONITOR_RECORD_22_2] = 0x06A8,
- [PMIF_MONITOR_RECORD_22_3] = 0x06AC,
- [PMIF_MONITOR_RECORD_22_4] = 0x06B0,
- [PMIF_MONITOR_RECORD_23_0] = 0x06B4,
- [PMIF_MONITOR_RECORD_23_1] = 0x06B8,
- [PMIF_MONITOR_RECORD_23_2] = 0x06BC,
- [PMIF_MONITOR_RECORD_23_3] = 0x06C0,
- [PMIF_MONITOR_RECORD_23_4] = 0x06C4,
- [PMIF_MONITOR_RECORD_24_0] = 0x06C8,
- [PMIF_MONITOR_RECORD_24_1] = 0x06CC,
- [PMIF_MONITOR_RECORD_24_2] = 0x06D0,
- [PMIF_MONITOR_RECORD_24_3] = 0x06D4,
- [PMIF_MONITOR_RECORD_24_4] = 0x06D8,
- [PMIF_MONITOR_RECORD_25_0] = 0x06DC,
- [PMIF_MONITOR_RECORD_25_1] = 0x06E0,
- [PMIF_MONITOR_RECORD_25_2] = 0x06E4,
- [PMIF_MONITOR_RECORD_25_3] = 0x06E8,
- [PMIF_MONITOR_RECORD_25_4] = 0x06EC,
- [PMIF_MONITOR_RECORD_26_0] = 0x06F0,
- [PMIF_MONITOR_RECORD_26_1] = 0x06F4,
- [PMIF_MONITOR_RECORD_26_2] = 0x06F8,
- [PMIF_MONITOR_RECORD_26_3] = 0x06FC,
- [PMIF_MONITOR_RECORD_26_4] = 0x0700,
- [PMIF_MONITOR_RECORD_27_0] = 0x0704,
- [PMIF_MONITOR_RECORD_27_1] = 0x0708,
- [PMIF_MONITOR_RECORD_27_2] = 0x070C,
- [PMIF_MONITOR_RECORD_27_3] = 0x0710,
- [PMIF_MONITOR_RECORD_27_4] = 0x0714,
- [PMIF_MONITOR_RECORD_28_0] = 0x0718,
- [PMIF_MONITOR_RECORD_28_1] = 0x071C,
- [PMIF_MONITOR_RECORD_28_2] = 0x0720,
- [PMIF_MONITOR_RECORD_28_3] = 0x0724,
- [PMIF_MONITOR_RECORD_28_4] = 0x0728,
- [PMIF_MONITOR_RECORD_29_0] = 0x072C,
- [PMIF_MONITOR_RECORD_29_1] = 0x0730,
- [PMIF_MONITOR_RECORD_29_2] = 0x0734,
- [PMIF_MONITOR_RECORD_29_3] = 0x0738,
- [PMIF_MONITOR_RECORD_29_4] = 0x073C,
- [PMIF_MONITOR_RECORD_30_0] = 0x0740,
- [PMIF_MONITOR_RECORD_30_1] = 0x0744,
- [PMIF_MONITOR_RECORD_30_2] = 0x0748,
- [PMIF_MONITOR_RECORD_30_3] = 0x074C,
- [PMIF_MONITOR_RECORD_30_4] = 0x0750,
- [PMIF_MONITOR_RECORD_31_0] = 0x0754,
- [PMIF_MONITOR_RECORD_31_1] = 0x0758,
- [PMIF_MONITOR_RECORD_31_2] = 0x075C,
- [PMIF_MONITOR_RECORD_31_3] = 0x0760,
- [PMIF_MONITOR_RECORD_31_4] = 0x0764,
- [PMIF_DEBUG_CTRL] = 0x0768,
- [PMIF_RESERVED_0] = 0x0770,
- [PMIF_SWINF_0_ACC] = 0x0C00,
- [PMIF_SWINF_0_WDATA_31_0] = 0x0C04,
- [PMIF_SWINF_0_WDATA_63_32] = 0x0C08,
- [PMIF_SWINF_0_RDATA_31_0] = 0x0C14,
- [PMIF_SWINF_0_RDATA_63_32] = 0x0C18,
- [PMIF_SWINF_0_VLD_CLR] = 0x0C24,
- [PMIF_SWINF_0_STA] = 0x0C28,
- [PMIF_SWINF_1_ACC] = 0x0C40,
- [PMIF_SWINF_1_WDATA_31_0] = 0x0C44,
- [PMIF_SWINF_1_WDATA_63_32] = 0x0C48,
- [PMIF_SWINF_1_RDATA_31_0] = 0x0C54,
- [PMIF_SWINF_1_RDATA_63_32] = 0x0C58,
- [PMIF_SWINF_1_VLD_CLR] = 0x0C64,
- [PMIF_SWINF_1_STA] = 0x0C68,
- [PMIF_SWINF_2_ACC] = 0x0C80,
- [PMIF_SWINF_2_WDATA_31_0] = 0x0C84,
- [PMIF_SWINF_2_WDATA_63_32] = 0x0C88,
- [PMIF_SWINF_2_RDATA_31_0] = 0x0C94,
- [PMIF_SWINF_2_RDATA_63_32] = 0x0C98,
- [PMIF_SWINF_2_VLD_CLR] = 0x0CA4,
- [PMIF_SWINF_2_STA] = 0x0CA8,
- [PMIF_SWINF_3_ACC] = 0x0CC0,
- [PMIF_SWINF_3_WDATA_31_0] = 0x0CC4,
- [PMIF_SWINF_3_WDATA_63_32] = 0x0CC8,
- [PMIF_SWINF_3_RDATA_31_0] = 0x0CD4,
- [PMIF_SWINF_3_RDATA_63_32] = 0x0CD8,
- [PMIF_SWINF_3_VLD_CLR] = 0x0CE4,
- [PMIF_SWINF_3_STA] = 0x0CE8,
- };
- #if SPMI_KERNEL
- static unsigned char spmi_pmif_log_buf[1280];
- #endif
- /* spmi & pmif debug mechanism */
- void spmi_dump_pmif_busy_reg(int mstid)
- {
- struct pmif *arb = get_pmif_controller(PMIF_SPMI, mstid);
- unsigned int i = 0, offset = 0, tmp_dat = 0;
- unsigned int start = 0, end = 0;
- start = arb->dbgregs[PMIF_INF_BUSY_STA]/4;
- end = arb->dbgregs[PMIF_OTHER_BUSY_STA_1]/4;
- PMIF_CRI("");
- for (i = start; i <= end; i++) {
- offset = arb->dbgregs[PMIF_INF_BUSY_STA] + (i * 4);
- tmp_dat = DRV_Reg32(arb->base + offset);
- PMIF_CRIL("(0x%x)=0x%x ", offset, tmp_dat);
- if (i == 0)
- continue;
- }
- PMIF_CRIL("\r\n");
- spmi_dump_pmif_swinf_reg(mstid);
- }
- void spmi_dump_pmif_swinf_reg(int mstid)
- {
- struct pmif *arb = get_pmif_controller(PMIF_SPMI, mstid);
- unsigned int i = 0, offset = 0, j = 0, tmp_dat = 0;
- unsigned int swinf[4] = {0}, cmd[4] = {0}, rw[4] = {0};
- unsigned int slvid[4] = {0}, bytecnt[4] = {0}, adr[4] = {0};
- #if 0
- unsigned int wd_31_0[4] = {0}, wd_63_32[4] = {0};
- unsigned int rd_31_0[4] = {0}, rd_63_32[4] = {0};
- #endif
- unsigned int wd_31_0[4] = {0}, rd_31_0[4] = {0};
- unsigned int err[4] = {0}, sbusy[4] = {0}, done[4] = {0};
- unsigned int qfillcnt[4] = {0}, qfreecnt[4] = {0}, qempty[4] = {0};
- unsigned int qfull[4] = {0}, req[4] = {0}, fsm[4] = {0}, en[4] = {0};
- for (i = 0; i < 4; i++) {
- offset = arb->dbgregs[PMIF_SWINF_0_ACC] + (i * 0x40);
- tmp_dat = DRV_Reg32(arb->base + offset);
- swinf[j] = i;
- cmd[j] = (tmp_dat & (0x3 << 30)) >> 30;
- rw[j] = (tmp_dat & (0x1 << 29)) >> 29;
- slvid[j] = (tmp_dat & (0xf << 24)) >> 24;
- bytecnt[j] = (tmp_dat & (0xf << 16)) >> 16;
- adr[j] = (tmp_dat & (0xffff << 0)) >> 0;
- j += 1;
- }
- j = 0;
- for (i = 0; i < 4; i++) {
- offset = arb->dbgregs[PMIF_SWINF_0_WDATA_31_0] + (i * 0x40);
- tmp_dat = DRV_Reg32(arb->base + offset);
- wd_31_0[j] = tmp_dat;
- j += 1;
- }
- j = 0;
- for (i = 0; i < 4; i++) {
- offset = arb->dbgregs[PMIF_SWINF_0_RDATA_31_0] + (i * 0x40);
- tmp_dat = DRV_Reg32(arb->base + offset);
- rd_31_0[j] = tmp_dat;
- j += 1;
- }
- j = 0;
- for (i = 0; i < 4; i++) {
- offset = arb->dbgregs[PMIF_SWINF_0_STA] + (i * 0x40);
- tmp_dat = DRV_Reg32(arb->base + offset);
- err[j] = (tmp_dat & (0x1 << 18)) >> 18;
- sbusy[j] = (tmp_dat & (0x1 << 17)) >> 17;
- done[j] = (tmp_dat & (0x1 << 15)) >> 15;
- qfillcnt[j] = (tmp_dat & (0xf << 11)) >> 11;
- qfreecnt[j] = (tmp_dat & (0xf << 7)) >> 7;
- qempty[j] = (tmp_dat & (0x1 << 6)) >> 6;
- qfull[j] = (tmp_dat & (0x1 << 5)) >> 5;
- req[j] = (tmp_dat & (0x1 << 4)) >> 4;
- fsm[j] = (tmp_dat & (0x7 << 1)) >> 1;
- en[j] = (tmp_dat & (0x1 << 0)) >> 0;
- j += 1;
- }
- for (i = 0; i < 4; i++) {
- if (rw[i] == 0) {
- PMIF_CRI("[swinf:%d, cmd:0x%x, rw:0x%x, slvid:%d ",
- swinf[i], cmd[i], rw[i], slvid[i]);
- PMIF_CRIL("bytecnt:%d (read adr 0x%04x=0x%x)]\r\n",
- bytecnt[i], adr[i], rd_31_0[i]);
- PMIF_CRI("[err:%d, sbusy:%d, done:%d, qfillcnt:%d ",
- err[i], sbusy[i], done[i], qfillcnt[i]);
- PMIF_CRIL("qfreecnt:%d, qempty:%d, qfull:%d, req:%d ",
- qfreecnt[i], qempty[i], qfull[i], req[i]);
- PMIF_CRIL("fsm:%d, en:%d]\r\n", fsm[i], en[i]);
- } else {
- PMIF_CRI("[swinf:%d, cmd:0x%x, rw:0x%x, slvid:%d ",
- swinf[i], cmd[i], rw[i], slvid[i]);
- PMIF_CRIL("bytecnt:%d (write adr 0x%04x=0x%x)]\r\n",
- bytecnt[i], adr[i], wd_31_0[i]);
- PMIF_CRI("[err:%d, sbusy:%d, done:%d, qfillcnt:%d ",
- err[i], sbusy[i], done[i], qfillcnt[i]);
- PMIF_CRIL("qfreecnt:%d, qempty:%d, qfull:%d, req:%d ",
- qfreecnt[i], qempty[i], qfull[i], req[i]);
- PMIF_CRIL("fsm:%d, en:%d]\r\n", fsm[i], en[i]);
- }
- }
- }
- void spmi_dump_pmif_reg(int mstid)
- {
- struct pmif *arb = get_pmif_controller(PMIF_SPMI, mstid);
- unsigned int i = 0, offset = 0, tmp_dat = 0;
- unsigned int start = 0, end = 0;
- start = arb->dbgregs[PMIF_INIT_DONE]/4;
- end = arb->dbgregs[PMIF_RESERVED_0]/4;
- PMIF_CRI("");
- for (i = start; i <= end; i++) {
- offset = arb->dbgregs[PMIF_INIT_DONE] + (i * 4);
- tmp_dat = DRV_Reg32(arb->base + offset);
- PMIF_CRIL("(0x%x)=0x%x ", offset, tmp_dat);
- if (i == 0)
- continue;
- if (i % 8 == 0) {
- PMIF_CRIL("\r\n[PMIF] ");
- }
- }
- PMIF_CRIL("\r\n");
- spmi_dump_pmif_swinf_reg(mstid);
- }
- void spmi_dump_pmif_record_reg(int mstid)
- {
- struct pmif *arb = get_pmif_controller(PMIF_SPMI, mstid);
- unsigned int i = 0, offset = 0, j = 0, tmp_dat = 0;
- unsigned int chan[32] = {0}, cmd[32] = {0}, rw[32] = {0};
- unsigned int slvid[32] = {0}, bytecnt[32] = {0}, adr[32] = {0};
- #if 0
- unsigned int wd_31_0[32] = {0}, wd_63_32[32] = {0};
- #endif
- unsigned int wd_31_0[32] = {0};
- for (i = 0; i < 32; i++) {
- offset = arb->dbgregs[PMIF_MONITOR_RECORD_0_0] + (i * 0x14);
- tmp_dat = DRV_Reg32(arb->base + offset);
- chan[j] = (tmp_dat & (0xf8000000)) >> 27;
- cmd[j] = (tmp_dat & (0x3 << 25)) >> 25;
- rw[j] = (tmp_dat & (0x1 << 24)) >> 24;
- slvid[j] = (tmp_dat & (0xf << 20)) >> 20;
- bytecnt[j] = (tmp_dat & (0xf << 16)) >> 16;
- adr[j] = (tmp_dat & (0xffff << 0)) >> 0;
- j += 1;
- }
- j = 0;
- for (i = 0; i < 32; i++) {
- offset = arb->dbgregs[PMIF_MONITOR_RECORD_0_1] + (i * 0x14);
- tmp_dat = DRV_Reg32(arb->base + offset);
- wd_31_0[j] = tmp_dat;
- j += 1;
- }
- for (i = 0; i < 32; i++) {
- SPMI_CRI("[swinf:%d, cmd:0x%x, rw:0x%x, slvid:%d ",
- chan[i], cmd[i], rw[i], slvid[i]);
- SPMI_CRIL("bytecnt:%d (adr 0x%04x=0x%x)]\r\n",
- bytecnt[i], adr[i], wd_31_0[i]);
- }
- spmi_dump_pmif_swinf_reg(mstid);
- /* clear record data and re-enable */
- DRV_WriteReg32(arb->base + arb->dbgregs[PMIF_MONITOR_CTRL], 0x800);
- DRV_WriteReg32(arb->base + arb->dbgregs[PMIF_MONITOR_CTRL], 0x5);
- }
- #if 0
- void spmi_dump_pmif_record_reg(int mstid)
- {
- struct pmif *arb = get_pmif_controller(PMIF_SPMI, mstid);
- unsigned int i = 0, offset = 0, log_size = 0;
- unsigned int chan[32] = {0}, cmd[32] = {0}, wr[32] = {0};
- unsigned int slvid[32] = {0}, bytecnt[32] = {0}, adr[32] = {0};
- unsigned int wd_31_0[32] = {0}, wd_63_32[32] = {0};
- unsigned int j = 0, s = 0, e = 0, tmp_dat = 0;
- log_size += sprintf(spmi_pmif_log_buf, "\npmif ");
- s = arb->dbgregs[PMIF_MONITOR_RECORD_0_0];
- e = arb->dbgregs[PMIF_MONITOR_RECORD_31_0];
- for (i = 0; i < 32; i++) {
- offset = arb->dbgregs[PMIF_MONITOR_RECORD_0_0] + (i * 0x14);
- tmp_dat = DRV_Reg32(arb->base + offset);
- chan[j] = (tmp_dat & 0xf8000000) >> 27;
- cmd[j] = (tmp_dat & 0x06000000) >> 25;
- wr[j] = (tmp_dat & 0x01000000) >> 24;
- slvid[j] = (tmp_dat & 0x00f00000) >> 20;
- bytecnt[j] = (tmp_dat & 0x000f0000) >> 16;
- adr[j] = (tmp_dat & 0x0000ffff) >> 0;
- j += 1;
- }
- j = 0;
- s = arb->dbgregs[PMIF_MONITOR_RECORD_0_1];
- e = arb->dbgregs[PMIF_MONITOR_RECORD_31_1];
- for (i = 0; i < 32; i++) {
- offset = arb->dbgregs[PMIF_MONITOR_RECORD_0_1] + (i * 0x14);
- tmp_dat = DRV_Reg32(arb->base + offset);
- wd_31_0[j] = tmp_dat;
- j += 1;
- }
- for (i = 0; i < 32; i++) {
- log_size += sprintf(spmi_pmif_log_buf + log_size,
- "[ch:%d, cmd:0x%x, wr:0x%x, slvid:%d, bytecnt:%d ",
- chan[i], cmd[i], wr[i], slvid[i], bytecnt[i]);
- log_size += sprintf(spmi_pmif_log_buf + log_size,
- "addr[0x%04x]=0x%04x]", adr[i], wd_31_0[i]);
- if (i == 0)
- continue;
- if (i % 2 == 0) {
- log_size += sprintf(spmi_pmif_log_buf + log_size,
- "log_size:%d\npmif ", log_size);
- }
- }
- SPMI_CRI("\npmif %s %d\n", spmi_pmif_log_buf, log_size);
- log_size = 0;
- #if 0
- for (i = 0; i <= 14; i++) {
- offset = 0xc00 + i * 4;
- reg_addr = wrp->base + offset;
- log_size += sprintf(spmi_pmif_log_buf + log_size,
- "(0x%x) = 0x%x ", offset, readl(reg_addr));
- }
- PMIF_ERR(wrp->dev, "\npmif %s %d\n", spmi_pmif_log_buf, log_size);
- if (HAS_CAP(arb->dbgcaps, PWRAP_CAP_MON_V1)) {
- pmif_writel(wrp, 0x8, PWRAP_MONITOR_CTRL_0);
- pmif_writel(wrp, 0x5, PWRAP_MONITOR_CTRL_0);
- } else if (HAS_CAP(arb->dbgcaps, PWRAP_CAP_MON_V2)) {
- pmif_writel(wrp, 0x800, PWRAP_MONITOR_CTRL_0);
- pmif_writel(wrp, 0x5, PWRAP_MONITOR_CTRL_0);
- }
- #endif
- }
- #endif
- void spmi_dump_spmimst_reg(int mstid)
- {
- struct pmif *arb = get_pmif_controller(PMIF_SPMI, mstid);
- unsigned int i = 0, offset = 0, tmp_dat = 0;
- unsigned int start = 0, end = 0;
- start = arb->spmimst_regs[SPMI_OP_ST_CTRL]/4;
- end = arb->spmimst_regs[SPMI_REC4]/4;
- SPMI_CRI("");
- for (i = start; i <= end; i++) {
- offset = arb->spmimst_regs[SPMI_OP_ST_CTRL] + (i * 4);
- tmp_dat = DRV_Reg32(arb->spmimst_base + offset);
- SPMI_CRIL("(0x%x)=0x%x ", offset, tmp_dat);
- if (i == 0)
- continue;
- if (i % 8 == 0) {
- SPMI_CRIL("\r\n[SPMI] ");
- }
- }
- #if SPMI_RCS_SUPPORT
- offset = arb->spmimst_regs[SPMI_DEC_DBG];
- tmp_dat = DRV_Reg32(arb->spmimst_base + offset);
- SPMI_CRIL("(0x%x)=0x%x ", offset, tmp_dat);
- #endif
- offset = arb->spmimst_regs[SPMI_MST_DBG];
- tmp_dat = DRV_Reg32(arb->spmimst_base + offset);
- SPMI_CRIL("(0x%x)=0x%x ", offset, tmp_dat);
- SPMI_CRIL("\r\n");
- }
- void spmi_dump_mst_record_reg(int mstid)
- {
- #if SPMI_DEBUG
- struct pmif *arb = get_pmif_controller(PMIF_SPMI, mstid);
- SPMI_DBG("[0x%x]=0x%x [0x%x]=0x%x [0x%x]=0x%x [0x%x]=0x%x\r\n",
- arb->spmimst_regs[SPMI_OP_ST_STA],
- spmi_readl(mstid, SPMI_OP_ST_STA),
- arb->spmimst_regs[SPMI_REC0],
- spmi_readl(mstid, SPMI_REC0),
- arb->spmimst_regs[SPMI_REC1],
- spmi_readl(mstid, SPMI_REC1),
- arb->spmimst_regs[SPMI_REC2],
- spmi_readl(mstid, SPMI_REC2));
- SPMI_DBG("[0x%x]=0x%x [0x%x]=0x%x [0x%x]=0x%x\r\n",
- arb->spmimst_regs[SPMI_REC3],
- spmi_readl(mstid, SPMI_REC3),
- arb->spmimst_regs[SPMI_REC4],
- spmi_readl(mstid, SPMI_REC4),
- arb->spmimst_regs[SPMI_MST_DBG],
- spmi_readl(mstid, SPMI_MST_DBG));
- #endif
- }
- void spmi_dump_slv_record_reg(struct spmi_device *dev)
- {
- unsigned char rdata1 = 0, rdata2 = 0, rdata3 = 0, rdata4 = 0;
- unsigned int offset, i, j = 0;
- /* log sequence, idx 0->1->2->3->0 */
- for (offset = 0x34; offset < 0x50; offset += 4)
- {
- spmi_ext_register_readl(dev,
- (MT6315_PLT0_ID_ANA_ID + offset), &rdata1, 1);
- spmi_ext_register_readl(dev,
- (MT6315_PLT0_ID_ANA_ID + offset + 1), &rdata2, 1);
- spmi_ext_register_readl(dev,
- (MT6315_PLT0_ID_ANA_ID + offset + 2), &rdata3, 1);
- spmi_ext_register_readl(dev,
- (MT6315_PLT0_ID_ANA_ID + offset + 3), &rdata4, 1);
- if ((offset + 3) == 0x37) {
- i = (rdata4 & 0xc) >> 2;
- if (i == 0)
- SPMI_CRI("slvid:%d DBG. Last cmd idx:0x3\r\n",
- dev->slvid);
- else {
- SPMI_CRI("slvid:%d DBG. Last cmd idx:0x%x\r\n",
- dev->slvid, ((rdata4 & 0xc) >> 2) - 1);
- }
- }
- /*
- *SPMI_CRI("[0x%x]=0x%x [0x%x]=0x%x [0x%x]=0x%x [0x%x]=0x%x ",
- * offset, rdata1, (offset + 1), rdata2,
- * (offset + 2), rdata3, (offset + 3), rdata4);
- */
- SPMI_CRI("Idx:%d slvid:%d Type:0x%x, [0x%x]=0x%x\r\n", j,
- dev->slvid, (rdata4 & 0x3),
- (rdata2 << 0x8) | rdata1, rdata3);
- if (j <= 3)
- j++;
- }
- }
- int spmi_pmif_dbg_init(struct pmif *arb)
- {
- #if PMIF_MATCH_SUPPORT
- unsigned int int_en = 0;
- #endif
- arb->dbgregs = mt6xxx_pmif_dbg_regs;
- #if PMIF_MATCH_SUPPORT
- /* enable matching mode */
- PMIF_CRI("PMIF Matching Mode\n");
- DRV_WriteReg32(arb->base + arb->dbgregs[PMIF_IRQ_CLR_0], 0xffffffff);
- DRV_WriteReg32(arb->base + arb->dbgregs[PMIF_IRQ_CLR_1], 0xffffffff);
- DRV_WriteReg32(arb->base + arb->dbgregs[PMIF_IRQ_CLR_2], 0xffffffff);
- DRV_WriteReg32(arb->base + arb->dbgregs[PMIF_IRQ_CLR_3], 0xffffffff);
- int_en = DRV_Reg32(arb->base + arb->dbgregs[PMIF_IRQ_EVENT_EN_3]);
- DRV_WriteReg32(arb->base + arb->dbgregs[PMIF_IRQ_EVENT_EN_3],
- int_en | (0x1 << 7));
- /* set monitor channel, should same as ARB_EN */
- DRV_WriteReg32(arb->base + arb->dbgregs[PMIF_MONITOR_TARGET_CHAN_0],
- 0x2f5);
- /* [31:16] addr mask, ffff mean all bit check
- * [15:0] addr, which addr been checked
- */
- DRV_WriteReg32(arb->base + arb->dbgregs[PMIF_MONITOR_TARGET_ADDR_0],
- 0xffff03a5);
- /* [31:16] wdata mask, ffff mean all bit check
- * [15:0] data, which data been checked
- */
- DRV_WriteReg32(arb->base + arb->dbgregs[PMIF_MONITOR_TARGET_WDATA_0],
- 0xffff005a);
- /*
- * BIT[0] MONITOR_TARGET_WRITE_0
- * BIT[1] MONITOR_TARGET_WRITE_0_MASK: 0, rw all check, 1, check
- * BIT[0] if BIT[0] = 0, only check read;otherwise only check write.
- */
- DRV_WriteReg32(arb->base + arb->dbgregs[PMIF_MONITOR_TARGET_WRITE],
- 0x3);
- /* reset then enable */
- DRV_WriteReg32(arb->base + arb->dbgregs[PMIF_MONITOR_CTRL], 0x800);
- DRV_WriteReg32(arb->base + arb->dbgregs[PMIF_MONITOR_CTRL], 0x405);
- #else
- /* init pmif debug mechanism, hw matching mode or sw logging mode */
- DRV_WriteReg32(arb->base + arb->dbgregs[PMIF_MONITOR_TARGET_CHAN_0],
- 0x2f5);
- DRV_WriteReg32(arb->base + arb->dbgregs[PMIF_MONITOR_TARGET_ADDR_0],
- 0x0);
- DRV_WriteReg32(arb->base + arb->dbgregs[PMIF_MONITOR_TARGET_WDATA_0],
- 0x0);
- DRV_WriteReg32(arb->base + arb->dbgregs[PMIF_MONITOR_TARGET_WRITE],
- 0x001);
- DRV_WriteReg32(arb->base + arb->dbgregs[PMIF_MONITOR_CTRL], 0x800);
- DRV_WriteReg32(arb->base + arb->dbgregs[PMIF_MONITOR_CTRL], 0x5);
- #endif /* end of PMIF_MATCH_SUPPORT */
- return 0;
- }
- #endif /* endif SPMI_NO_PMIC */
|