Commit 9d22e6d7ad50472da399a500bf039e7718a6cdc9

Authored by Linus Torvalds

Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/sparc-2.6

* master.kernel.org:/pub/scm/linux/kernel/git/davem/sparc-2.6:
  [SUNLANCE]: fix compilation on sparc-UP
  [SPARC]: Defer clock_probe to fs_initcall()
  [SPARC64]: Fix typo in pgprot_noncached().
  [SPARC64]: Fix quad-float multiply emulation.

Showing 4 changed files Side-by-side Diff

arch/sparc/kernel/time.c
... ... @@ -225,6 +225,32 @@
225 225 return (data1 == data2); /* Was the write blocked? */
226 226 }
227 227  
  228 +static void __init mostek_set_system_time(void)
  229 +{
  230 + unsigned int year, mon, day, hour, min, sec;
  231 + struct mostek48t02 *mregs;
  232 +
  233 + mregs = (struct mostek48t02 *)mstk48t02_regs;
  234 + if(!mregs) {
  235 + prom_printf("Something wrong, clock regs not mapped yet.\n");
  236 + prom_halt();
  237 + }
  238 + spin_lock_irq(&mostek_lock);
  239 + mregs->creg |= MSTK_CREG_READ;
  240 + sec = MSTK_REG_SEC(mregs);
  241 + min = MSTK_REG_MIN(mregs);
  242 + hour = MSTK_REG_HOUR(mregs);
  243 + day = MSTK_REG_DOM(mregs);
  244 + mon = MSTK_REG_MONTH(mregs);
  245 + year = MSTK_CVT_YEAR( MSTK_REG_YEAR(mregs) );
  246 + xtime.tv_sec = mktime(year, mon, day, hour, min, sec);
  247 + xtime.tv_nsec = (INITIAL_JIFFIES % HZ) * (NSEC_PER_SEC / HZ);
  248 + set_normalized_timespec(&wall_to_monotonic,
  249 + -xtime.tv_sec, -xtime.tv_nsec);
  250 + mregs->creg &= ~MSTK_CREG_READ;
  251 + spin_unlock_irq(&mostek_lock);
  252 +}
  253 +
228 254 /* Probe for the real time clock chip on Sun4 */
229 255 static __inline__ void sun4_clock_probe(void)
230 256 {
... ... @@ -273,6 +299,7 @@
273 299 #endif
274 300 }
275 301  
  302 +#ifndef CONFIG_SUN4
276 303 static int __devinit clock_probe(struct of_device *op, const struct of_device_id *match)
277 304 {
278 305 struct device_node *dp = op->node;
... ... @@ -307,6 +334,8 @@
307 334 if (mostek_read(mstk48t02_regs + MOSTEK_SEC) & MSTK_STOP)
308 335 kick_start_clock();
309 336  
  337 + mostek_set_system_time();
  338 +
310 339 return 0;
311 340 }
312 341  
313 342  
314 343  
315 344  
316 345  
317 346  
318 347  
319 348  
... ... @@ -325,56 +354,37 @@
325 354  
326 355  
327 356 /* Probe for the mostek real time clock chip. */
328   -static void clock_init(void)
  357 +static int __init clock_init(void)
329 358 {
330   - of_register_driver(&clock_driver, &of_bus_type);
  359 + return of_register_driver(&clock_driver, &of_bus_type);
331 360 }
332 361  
  362 +/* Must be after subsys_initcall() so that busses are probed. Must
  363 + * be before device_initcall() because things like the RTC driver
  364 + * need to see the clock registers.
  365 + */
  366 +fs_initcall(clock_init);
  367 +#endif /* !CONFIG_SUN4 */
  368 +
333 369 void __init sbus_time_init(void)
334 370 {
335   - unsigned int year, mon, day, hour, min, sec;
336   - struct mostek48t02 *mregs;
337 371  
338   -#ifdef CONFIG_SUN4
339   - int temp;
340   - struct intersil *iregs;
341   -#endif
342   -
343 372 BTFIXUPSET_CALL(bus_do_settimeofday, sbus_do_settimeofday, BTFIXUPCALL_NORM);
344 373 btfixup();
345 374  
346 375 if (ARCH_SUN4)
347 376 sun4_clock_probe();
348   - else
349   - clock_init();
350 377  
351 378 sparc_init_timers(timer_interrupt);
352 379  
353 380 #ifdef CONFIG_SUN4
354 381 if(idprom->id_machtype == (SM_SUN4 | SM_4_330)) {
355   -#endif
356   - mregs = (struct mostek48t02 *)mstk48t02_regs;
357   - if(!mregs) {
358   - prom_printf("Something wrong, clock regs not mapped yet.\n");
359   - prom_halt();
360   - }
361   - spin_lock_irq(&mostek_lock);
362   - mregs->creg |= MSTK_CREG_READ;
363   - sec = MSTK_REG_SEC(mregs);
364   - min = MSTK_REG_MIN(mregs);
365   - hour = MSTK_REG_HOUR(mregs);
366   - day = MSTK_REG_DOM(mregs);
367   - mon = MSTK_REG_MONTH(mregs);
368   - year = MSTK_CVT_YEAR( MSTK_REG_YEAR(mregs) );
369   - xtime.tv_sec = mktime(year, mon, day, hour, min, sec);
370   - xtime.tv_nsec = (INITIAL_JIFFIES % HZ) * (NSEC_PER_SEC / HZ);
371   - set_normalized_timespec(&wall_to_monotonic,
372   - -xtime.tv_sec, -xtime.tv_nsec);
373   - mregs->creg &= ~MSTK_CREG_READ;
374   - spin_unlock_irq(&mostek_lock);
375   -#ifdef CONFIG_SUN4
  382 + mostek_set_system_time();
376 383 } else if(idprom->id_machtype == (SM_SUN4 | SM_4_260) ) {
377 384 /* initialise the intersil on sun4 */
  385 + unsigned int year, mon, day, hour, min, sec;
  386 + int temp;
  387 + struct intersil *iregs;
378 388  
379 389 iregs=intersil_clock;
380 390 if(!iregs) {
drivers/net/sunlance.c
... ... @@ -1537,7 +1537,7 @@
1537 1537 {
1538 1538 if ((idprom->id_machtype == (SM_SUN4|SM_4_330)) ||
1539 1539 (idprom->id_machtype == (SM_SUN4|SM_4_470))) {
1540   - memset(&sun4_sdev, 0, sizeof(sdev));
  1540 + memset(&sun4_sdev, 0, sizeof(struct sbus_dev));
1541 1541 sun4_sdev.reg_addrs[0].phys_addr = sun4_eth_physaddr;
1542 1542 sun4_sdev.irqs[0] = 6;
1543 1543 return sparc_lance_probe_one(&sun4_sdev, NULL, NULL);
1544 1544  
1545 1545  
... ... @@ -1547,16 +1547,16 @@
1547 1547  
1548 1548 static int __exit sunlance_sun4_remove(void)
1549 1549 {
1550   - struct lance_private *lp = dev_get_drvdata(&sun4_sdev->dev);
  1550 + struct lance_private *lp = dev_get_drvdata(&sun4_sdev.ofdev.dev);
1551 1551 struct net_device *net_dev = lp->dev;
1552 1552  
1553 1553 unregister_netdevice(net_dev);
1554 1554  
1555   - lance_free_hwresources(root_lance_dev);
  1555 + lance_free_hwresources(lp);
1556 1556  
1557 1557 free_netdev(net_dev);
1558 1558  
1559   - dev_set_drvdata(&sun4_sdev->dev, NULL);
  1559 + dev_set_drvdata(&sun4_sdev.ofdev.dev, NULL);
1560 1560  
1561 1561 return 0;
1562 1562 }
include/asm-sparc64/pgtable.h
... ... @@ -339,7 +339,7 @@
339 339 " .section .sun4v_2insn_patch, \"ax\"\n"
340 340 " .word 661b\n"
341 341 " andn %0, %4, %0\n"
342   - " or %0, %3, %0\n"
  342 + " or %0, %5, %0\n"
343 343 " .previous\n"
344 344 : "=r" (val)
345 345 : "0" (val), "i" (_PAGE_CP_4U | _PAGE_CV_4U), "i" (_PAGE_E_4U),
include/asm-sparc64/sfp-machine.h
... ... @@ -34,7 +34,7 @@
34 34 #define _FP_MUL_MEAT_D(R,X,Y) \
35 35 _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm)
36 36 #define _FP_MUL_MEAT_Q(R,X,Y) \
37   - _FP_MUL_MEAT_2_wide_3mul(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm)
  37 + _FP_MUL_MEAT_2_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm)
38 38  
39 39 #define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_imm(S,R,X,Y,_FP_DIV_HELP_imm)
40 40 #define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_1_udiv_norm(D,R,X,Y)