Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 204584
b: refs/heads/master
c: ca14812
h: refs/heads/master
v: v3
  • Loading branch information
David Daney authored and Ralf Baechle committed Aug 5, 2010
1 parent e32aec2 commit 7c46a0c
Show file tree
Hide file tree
Showing 5 changed files with 59 additions and 14 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: e6b78c4f224925c71cce57033b1e6e30dd56add7
refs/heads/master: ca148125e6134de334b61822539d220794d8da18
55 changes: 55 additions & 0 deletions trunk/arch/mips/cavium-octeon/csrc-octeon.c
Original file line number Diff line number Diff line change
Expand Up @@ -80,3 +80,58 @@ void __init plat_time_init(void)
clocksource_set_clock(&clocksource_mips, mips_hpt_frequency);
clocksource_register(&clocksource_mips);
}

static u64 octeon_udelay_factor;
static u64 octeon_ndelay_factor;

void __init octeon_setup_delays(void)
{
octeon_udelay_factor = octeon_get_clock_rate() / 1000000;
/*
* For __ndelay we divide by 2^16, so the factor is multiplied
* by the same amount.
*/
octeon_ndelay_factor = (octeon_udelay_factor * 0x10000ull) / 1000ull;

preset_lpj = octeon_get_clock_rate() / HZ;
}

void __udelay(unsigned long us)
{
u64 cur, end, inc;

cur = read_c0_cvmcount();

inc = us * octeon_udelay_factor;
end = cur + inc;

while (end > cur)
cur = read_c0_cvmcount();
}
EXPORT_SYMBOL(__udelay);

void __ndelay(unsigned long ns)
{
u64 cur, end, inc;

cur = read_c0_cvmcount();

inc = ((ns * octeon_ndelay_factor) >> 16);
end = cur + inc;

while (end > cur)
cur = read_c0_cvmcount();
}
EXPORT_SYMBOL(__ndelay);

void __delay(unsigned long loops)
{
u64 cur, end;

cur = read_c0_cvmcount();
end = cur + loops;

while (end > cur)
cur = read_c0_cvmcount();
}
EXPORT_SYMBOL(__delay);
4 changes: 2 additions & 2 deletions trunk/arch/mips/cavium-octeon/setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -594,13 +594,13 @@ void __init prom_init(void)
* the filesystem. Also specify the calibration delay
* to avoid calculating it every time.
*/
strcat(arcs_cmdline, " rw root=1f00"
" lpj=60176 slram=root,0x40000000,+1073741824");
strcat(arcs_cmdline, " rw root=1f00 slram=root,0x40000000,+1073741824");
}

mips_hpt_frequency = octeon_get_clock_rate();

octeon_init_cvmcount();
octeon_setup_delays();

_machine_restart = octeon_restart;
_machine_halt = octeon_halt;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,22 +61,11 @@

#define kernel_uses_smartmips_rixi (cpu_data[0].cputype == CPU_CAVIUM_OCTEON_PLUS)

#define ARCH_HAS_READ_CURRENT_TIMER 1
#define ARCH_HAS_IRQ_PER_CPU 1
#define ARCH_HAS_SPINLOCK_PREFETCH 1
#define spin_lock_prefetch(x) prefetch(x)
#define PREFETCH_STRIDE 128

static inline int read_current_timer(unsigned long *result)
{
asm volatile ("rdhwr %0,$31\n"
#ifndef CONFIG_64BIT
"\tsll %0, 0"
#endif
: "=r" (*result));
return 0;
}

#ifdef __OCTEON__
/*
* All gcc versions that have OCTEON support define __OCTEON__ and have the
Expand Down
1 change: 1 addition & 0 deletions trunk/arch/mips/include/asm/octeon/octeon.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ extern void octeon_crypto_disable(struct octeon_cop2_state *state,
extern asmlinkage void octeon_cop2_restore(struct octeon_cop2_state *task);

extern void octeon_init_cvmcount(void);
extern void octeon_setup_delays(void);

#define OCTEON_ARGV_MAX_ARGS 64
#define OCTOEN_SERIAL_LEN 20
Expand Down

0 comments on commit 7c46a0c

Please sign in to comment.