0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013 #ifndef __ASM_POWERPC_MPC52xx_H__
0014 #define __ASM_POWERPC_MPC52xx_H__
0015
0016 #ifndef __ASSEMBLY__
0017 #include <asm/types.h>
0018 #include <asm/mpc5xxx.h>
0019 #endif
0020
0021 #include <linux/suspend.h>
0022
0023
0024 #define MPC5200_SVR 0x80110010
0025 #define MPC5200_SVR_MASK 0xfffffff0
0026 #define MPC5200B_SVR 0x80110020
0027 #define MPC5200B_SVR_MASK 0xfffffff0
0028
0029
0030
0031
0032
0033 #ifndef __ASSEMBLY__
0034
0035
0036 struct mpc52xx_mmap_ctl {
0037 u32 mbar;
0038
0039 u32 cs0_start;
0040 u32 cs0_stop;
0041 u32 cs1_start;
0042 u32 cs1_stop;
0043 u32 cs2_start;
0044 u32 cs2_stop;
0045 u32 cs3_start;
0046 u32 cs3_stop;
0047 u32 cs4_start;
0048 u32 cs4_stop;
0049 u32 cs5_start;
0050 u32 cs5_stop;
0051
0052 u32 sdram0;
0053 u32 sdram1;
0054
0055 u32 reserved[4];
0056
0057 u32 boot_start;
0058 u32 boot_stop;
0059
0060 u32 ipbi_ws_ctrl;
0061
0062 u32 cs6_start;
0063 u32 cs6_stop;
0064 u32 cs7_start;
0065 u32 cs7_stop;
0066 };
0067
0068
0069 struct mpc52xx_sdram {
0070 u32 mode;
0071 u32 ctrl;
0072 u32 config1;
0073 u32 config2;
0074 };
0075
0076
0077 struct mpc52xx_sdma {
0078 u32 taskBar;
0079 u32 currentPointer;
0080 u32 endPointer;
0081 u32 variablePointer;
0082
0083 u8 IntVect1;
0084 u8 IntVect2;
0085 u16 PtdCntrl;
0086
0087 u32 IntPend;
0088 u32 IntMask;
0089
0090 u16 tcr[16];
0091
0092 u8 ipr[32];
0093
0094 u32 cReqSelect;
0095 u32 task_size0;
0096 u32 task_size1;
0097 u32 MDEDebug;
0098 u32 ADSDebug;
0099 u32 Value1;
0100 u32 Value2;
0101 u32 Control;
0102 u32 Status;
0103 u32 PTDDebug;
0104 };
0105
0106
0107 struct mpc52xx_gpt {
0108 u32 mode;
0109 u32 count;
0110 u32 pwm;
0111 u32 status;
0112 };
0113
0114
0115 struct mpc52xx_gpio {
0116 u32 port_config;
0117 u32 simple_gpioe;
0118 u32 simple_ode;
0119 u32 simple_ddr;
0120 u32 simple_dvo;
0121 u32 simple_ival;
0122 u8 outo_gpioe;
0123 u8 reserved1[3];
0124 u8 outo_dvo;
0125 u8 reserved2[3];
0126 u8 sint_gpioe;
0127 u8 reserved3[3];
0128 u8 sint_ode;
0129 u8 reserved4[3];
0130 u8 sint_ddr;
0131 u8 reserved5[3];
0132 u8 sint_dvo;
0133 u8 reserved6[3];
0134 u8 sint_inten;
0135 u8 reserved7[3];
0136 u16 sint_itype;
0137 u16 reserved8;
0138 u8 gpio_control;
0139 u8 reserved9[3];
0140 u8 sint_istat;
0141 u8 sint_ival;
0142 u8 bus_errs;
0143 u8 reserved10;
0144 };
0145
0146 #define MPC52xx_GPIO_PSC_CONFIG_UART_WITHOUT_CD 4
0147 #define MPC52xx_GPIO_PSC_CONFIG_UART_WITH_CD 5
0148 #define MPC52xx_GPIO_PCI_DIS (1<<15)
0149
0150
0151 struct mpc52xx_gpio_wkup {
0152 u8 wkup_gpioe;
0153 u8 reserved1[3];
0154 u8 wkup_ode;
0155 u8 reserved2[3];
0156 u8 wkup_ddr;
0157 u8 reserved3[3];
0158 u8 wkup_dvo;
0159 u8 reserved4[3];
0160 u8 wkup_inten;
0161 u8 reserved5[3];
0162 u8 wkup_iinten;
0163 u8 reserved6[3];
0164 u16 wkup_itype;
0165 u8 reserved7[2];
0166 u8 wkup_maste;
0167 u8 reserved8[3];
0168 u8 wkup_ival;
0169 u8 reserved9[3];
0170 u8 wkup_istat;
0171 u8 reserved10[3];
0172 };
0173
0174
0175 struct mpc52xx_xlb {
0176 u8 reserved[0x40];
0177 u32 config;
0178 u32 version;
0179 u32 status;
0180 u32 int_enable;
0181 u32 addr_capture;
0182 u32 bus_sig_capture;
0183 u32 addr_timeout;
0184 u32 data_timeout;
0185 u32 bus_act_timeout;
0186 u32 master_pri_enable;
0187 u32 master_priority;
0188 u32 base_address;
0189 u32 snoop_window;
0190 };
0191
0192 #define MPC52xx_XLB_CFG_PLDIS (1 << 31)
0193 #define MPC52xx_XLB_CFG_SNOOP (1 << 15)
0194
0195
0196 struct mpc52xx_cdm {
0197 u32 jtag_id;
0198 u32 rstcfg;
0199 u32 breadcrumb;
0200
0201 u8 mem_clk_sel;
0202 u8 xlb_clk_sel;
0203 u8 ipb_clk_sel;
0204 u8 pci_clk_sel;
0205
0206 u8 ext_48mhz_en;
0207 u8 fd_enable;
0208 u16 fd_counters;
0209
0210 u32 clk_enables;
0211
0212 u8 osc_disable;
0213 u8 reserved0[3];
0214
0215 u8 ccs_sleep_enable;
0216 u8 osc_sleep_enable;
0217 u8 reserved1;
0218 u8 ccs_qreq_test;
0219
0220 u8 soft_reset;
0221 u8 no_ckstp;
0222 u8 reserved2[2];
0223
0224 u8 pll_lock;
0225 u8 pll_looselock;
0226 u8 pll_sm_lockwin;
0227 u8 reserved3;
0228
0229 u16 reserved4;
0230 u16 mclken_div_psc1;
0231
0232 u16 reserved5;
0233 u16 mclken_div_psc2;
0234
0235 u16 reserved6;
0236 u16 mclken_div_psc3;
0237
0238 u16 reserved7;
0239 u16 mclken_div_psc6;
0240 };
0241
0242
0243 struct mpc52xx_intr {
0244 u32 per_mask;
0245 u32 per_pri1;
0246 u32 per_pri2;
0247 u32 per_pri3;
0248 u32 ctrl;
0249 u32 main_mask;
0250 u32 main_pri1;
0251 u32 main_pri2;
0252 u32 reserved1;
0253 u32 enc_status;
0254 u32 crit_status;
0255 u32 main_status;
0256 u32 per_status;
0257 u32 reserved2;
0258 u32 per_error;
0259 };
0260
0261 #endif
0262
0263
0264
0265
0266
0267
0268 #ifndef __ASSEMBLY__
0269
0270 struct device_node;
0271
0272
0273 extern void mpc5200_setup_xlb_arbiter(void);
0274 extern void mpc52xx_declare_of_platform_devices(void);
0275 extern int mpc5200_psc_ac97_gpio_reset(int psc_number);
0276 extern void mpc52xx_map_common_devices(void);
0277 extern int mpc52xx_set_psc_clkdiv(int psc_id, int clkdiv);
0278 extern void __noreturn mpc52xx_restart(char *cmd);
0279
0280
0281 struct mpc52xx_gpt_priv;
0282 extern struct mpc52xx_gpt_priv *mpc52xx_gpt_from_irq(int irq);
0283 extern int mpc52xx_gpt_start_timer(struct mpc52xx_gpt_priv *gpt, u64 period,
0284 int continuous);
0285 extern u64 mpc52xx_gpt_timer_period(struct mpc52xx_gpt_priv *gpt);
0286 extern int mpc52xx_gpt_stop_timer(struct mpc52xx_gpt_priv *gpt);
0287
0288
0289 #define MPC52XX_LPBFIFO_FLAG_READ (0)
0290 #define MPC52XX_LPBFIFO_FLAG_WRITE (1<<0)
0291 #define MPC52XX_LPBFIFO_FLAG_NO_INCREMENT (1<<1)
0292 #define MPC52XX_LPBFIFO_FLAG_NO_DMA (1<<2)
0293 #define MPC52XX_LPBFIFO_FLAG_POLL_DMA (1<<3)
0294
0295 struct mpc52xx_lpbfifo_request {
0296 struct list_head list;
0297
0298
0299 unsigned int cs;
0300 size_t offset;
0301
0302
0303 void *data;
0304 phys_addr_t data_phys;
0305
0306
0307 size_t size;
0308 size_t pos;
0309 int flags;
0310 int defer_xfer_start;
0311
0312
0313 void (*callback)(struct mpc52xx_lpbfifo_request *);
0314
0315 void *priv;
0316
0317
0318 int irq_count;
0319 int irq_ticks;
0320 u8 last_byte;
0321 int buffer_not_done_cnt;
0322 };
0323
0324 extern int mpc52xx_lpbfifo_submit(struct mpc52xx_lpbfifo_request *req);
0325 extern void mpc52xx_lpbfifo_abort(struct mpc52xx_lpbfifo_request *req);
0326 extern void mpc52xx_lpbfifo_poll(void);
0327 extern int mpc52xx_lpbfifo_start_xfer(struct mpc52xx_lpbfifo_request *req);
0328
0329
0330 extern void mpc52xx_init_irq(void);
0331 extern unsigned int mpc52xx_get_irq(void);
0332
0333
0334 #ifdef CONFIG_PCI
0335 extern int __init mpc52xx_add_bridge(struct device_node *node);
0336 extern void __init mpc52xx_setup_pci(void);
0337 #else
0338 static inline void mpc52xx_setup_pci(void) { }
0339 #endif
0340
0341 #endif
0342
0343 #ifdef CONFIG_PM
0344 struct mpc52xx_suspend {
0345 void (*board_suspend_prepare)(void __iomem *mbar);
0346 void (*board_resume_finish)(void __iomem *mbar);
0347 };
0348
0349 extern struct mpc52xx_suspend mpc52xx_suspend;
0350 extern int __init mpc52xx_pm_init(void);
0351 extern int mpc52xx_set_wakeup_gpio(u8 pin, u8 level);
0352
0353
0354 extern int mpc52xx_pm_prepare(void);
0355 extern int mpc52xx_pm_enter(suspend_state_t);
0356 extern void mpc52xx_pm_finish(void);
0357 extern char saved_sram[0x4000];
0358
0359 #ifdef CONFIG_PPC_LITE5200
0360 int __init lite5200_pm_init(void);
0361 #endif
0362 #endif
0363
0364 #endif
0365