Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 123128
b: refs/heads/master
c: aaab5e8
h: refs/heads/master
v: v3
  • Loading branch information
Grant Likely committed Dec 21, 2008
1 parent e7db6fe commit 91e33a9
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 6 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: e4efe3c271c5498ffe7e167eaff01514be2b9a77
refs/heads/master: aaab5e83c2c25d94f7409bdc947a5cc383514e15
3 changes: 3 additions & 0 deletions trunk/arch/powerpc/sysdev/bestcomm/ata.c
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,9 @@ bcom_ata_init(int queue_len, int maxbufsize)
struct bcom_ata_var *var;
struct bcom_ata_inc *inc;

/* Prefetch breaks ATA DMA. Turn it off for ATA DMA */
bcom_disable_prefetch();

tsk = bcom_task_alloc(queue_len, sizeof(struct bcom_ata_bd), 0);
if (!tsk)
return NULL;
Expand Down
7 changes: 2 additions & 5 deletions trunk/arch/powerpc/sysdev/bestcomm/bestcomm.c
Original file line number Diff line number Diff line change
Expand Up @@ -279,7 +279,6 @@ bcom_engine_init(void)
int task;
phys_addr_t tdt_pa, ctx_pa, var_pa, fdt_pa;
unsigned int tdt_size, ctx_size, var_size, fdt_size;
u16 regval;

/* Allocate & clear SRAM zones for FDT, TDTs, contexts and vars/incs */
tdt_size = BCOM_MAX_TASKS * sizeof(struct bcom_tdt);
Expand Down Expand Up @@ -331,10 +330,8 @@ bcom_engine_init(void)
out_8(&bcom_eng->regs->ipr[BCOM_INITIATOR_ALWAYS], BCOM_IPR_ALWAYS);

/* Disable COMM Bus Prefetch on the original 5200; it's broken */
if ((mfspr(SPRN_SVR) & MPC5200_SVR_MASK) == MPC5200_SVR) {
regval = in_be16(&bcom_eng->regs->PtdCntrl);
out_be16(&bcom_eng->regs->PtdCntrl, regval | 1);
}
if ((mfspr(SPRN_SVR) & MPC5200_SVR_MASK) == MPC5200_SVR)
bcom_disable_prefetch();

/* Init lock */
spin_lock_init(&bcom_eng->lock);
Expand Down
16 changes: 16 additions & 0 deletions trunk/arch/powerpc/sysdev/bestcomm/bestcomm_priv.h
Original file line number Diff line number Diff line change
Expand Up @@ -241,6 +241,22 @@ extern void bcom_set_initiator(int task, int initiator);

#define TASK_ENABLE 0x8000

/**
* bcom_disable_prefetch - Hook to disable bus prefetching
*
* ATA DMA and the original MPC5200 need this due to silicon bugs. At the
* moment disabling prefetch is a one-way street. There is no mechanism
* in place to turn prefetch back on after it has been disabled. There is
* no reason it couldn't be done, it would just be more complex to implement.
*/
static inline void bcom_disable_prefetch(void)
{
u16 regval;

regval = in_be16(&bcom_eng->regs->PtdCntrl);
out_be16(&bcom_eng->regs->PtdCntrl, regval | 1);
};

static inline void
bcom_enable_task(int task)
{
Expand Down

0 comments on commit 91e33a9

Please sign in to comment.