setup.c (ba67cf5cf2ce10ad86a212b70f8c7c75d93a5016) setup.c (9ee820fa005254dfc816330f6654f14dcb2beee1)
1/*
2 * 64-bit pSeries and RS/6000 setup code.
3 *
4 * Copyright (C) 1995 Linus Torvalds
5 * Adapted from 'alpha' version by Gary Thomas
6 * Modified by Cort Dougan (cort@cs.nmt.edu)
7 * Modified by PPC64 Team, IBM Corp
8 *

--- 39 unchanged lines hidden (view full) ---

48#include <asm/rtas.h>
49#include <asm/pci-bridge.h>
50#include <asm/iommu.h>
51#include <asm/dma.h>
52#include <asm/machdep.h>
53#include <asm/irq.h>
54#include <asm/time.h>
55#include <asm/nvram.h>
1/*
2 * 64-bit pSeries and RS/6000 setup code.
3 *
4 * Copyright (C) 1995 Linus Torvalds
5 * Adapted from 'alpha' version by Gary Thomas
6 * Modified by Cort Dougan (cort@cs.nmt.edu)
7 * Modified by PPC64 Team, IBM Corp
8 *

--- 39 unchanged lines hidden (view full) ---

48#include <asm/rtas.h>
49#include <asm/pci-bridge.h>
50#include <asm/iommu.h>
51#include <asm/dma.h>
52#include <asm/machdep.h>
53#include <asm/irq.h>
54#include <asm/time.h>
55#include <asm/nvram.h>
56#include "xics.h"
57#include <asm/pmc.h>
58#include <asm/mpic.h>
56#include <asm/pmc.h>
57#include <asm/mpic.h>
58#include <asm/xics.h>
59#include <asm/ppc-pci.h>
60#include <asm/i8259.h>
61#include <asm/udbg.h>
62#include <asm/smp.h>
63#include <asm/firmware.h>
64#include <asm/eeh.h>
65#include <asm/pSeries_reconfig.h>
66

--- 133 unchanged lines hidden (view full) ---

200
201 /* Add ISUs */
202 opplen /= sizeof(u32);
203 for (n = 0, i = naddr; i < opplen; i += naddr, n++) {
204 unsigned long isuaddr = of_read_number(opprop + i, naddr);
205 mpic_assign_isu(mpic, n, isuaddr);
206 }
207
59#include <asm/ppc-pci.h>
60#include <asm/i8259.h>
61#include <asm/udbg.h>
62#include <asm/smp.h>
63#include <asm/firmware.h>
64#include <asm/eeh.h>
65#include <asm/pSeries_reconfig.h>
66

--- 133 unchanged lines hidden (view full) ---

200
201 /* Add ISUs */
202 opplen /= sizeof(u32);
203 for (n = 0, i = naddr; i < opplen; i += naddr, n++) {
204 unsigned long isuaddr = of_read_number(opprop + i, naddr);
205 mpic_assign_isu(mpic, n, isuaddr);
206 }
207
208 /* Setup top-level get_irq */
209 ppc_md.get_irq = mpic_get_irq;
210
208 /* All ISUs are setup, complete initialization */
209 mpic_init(mpic);
210
211 /* Look for cascade */
212 pseries_setup_i8259_cascade();
213}
214
215static void __init pseries_xics_init_IRQ(void)
216{
211 /* All ISUs are setup, complete initialization */
212 mpic_init(mpic);
213
214 /* Look for cascade */
215 pseries_setup_i8259_cascade();
216}
217
218static void __init pseries_xics_init_IRQ(void)
219{
217 xics_init_IRQ();
220 xics_init();
218 pseries_setup_i8259_cascade();
219}
220
221static void pseries_lpar_enable_pmcs(void)
222{
223 unsigned long set, reset;
224
225 set = 1UL << 63;

--- 7 unchanged lines hidden (view full) ---

233 const char *typep;
234
235 for (np = NULL; (np = of_find_node_by_name(np,
236 "interrupt-controller"));) {
237 typep = of_get_property(np, "compatible", NULL);
238 if (strstr(typep, "open-pic")) {
239 pSeries_mpic_node = of_node_get(np);
240 ppc_md.init_IRQ = pseries_mpic_init_IRQ;
221 pseries_setup_i8259_cascade();
222}
223
224static void pseries_lpar_enable_pmcs(void)
225{
226 unsigned long set, reset;
227
228 set = 1UL << 63;

--- 7 unchanged lines hidden (view full) ---

236 const char *typep;
237
238 for (np = NULL; (np = of_find_node_by_name(np,
239 "interrupt-controller"));) {
240 typep = of_get_property(np, "compatible", NULL);
241 if (strstr(typep, "open-pic")) {
242 pSeries_mpic_node = of_node_get(np);
243 ppc_md.init_IRQ = pseries_mpic_init_IRQ;
241 ppc_md.get_irq = mpic_get_irq;
242 setup_kexec_cpu_down_mpic();
243 smp_init_pseries_mpic();
244 return;
245 } else if (strstr(typep, "ppc-xicp")) {
246 ppc_md.init_IRQ = pseries_xics_init_IRQ;
247 setup_kexec_cpu_down_xics();
248 smp_init_pseries_xics();
249 return;

--- 148 unchanged lines hidden (view full) ---

398 /* We want to catch accesses from kernel and userspace */
399 return plpar_hcall_norets(H_SET_XDABR, dabr,
400 H_DABRX_KERNEL | H_DABRX_USER);
401}
402
403#define CMO_CHARACTERISTICS_TOKEN 44
404#define CMO_MAXLENGTH 1026
405
244 setup_kexec_cpu_down_mpic();
245 smp_init_pseries_mpic();
246 return;
247 } else if (strstr(typep, "ppc-xicp")) {
248 ppc_md.init_IRQ = pseries_xics_init_IRQ;
249 setup_kexec_cpu_down_xics();
250 smp_init_pseries_xics();
251 return;

--- 148 unchanged lines hidden (view full) ---

400 /* We want to catch accesses from kernel and userspace */
401 return plpar_hcall_norets(H_SET_XDABR, dabr,
402 H_DABRX_KERNEL | H_DABRX_USER);
403}
404
405#define CMO_CHARACTERISTICS_TOKEN 44
406#define CMO_MAXLENGTH 1026
407
408void pSeries_coalesce_init(void)
409{
410 struct hvcall_mpp_x_data mpp_x_data;
411
412 if (firmware_has_feature(FW_FEATURE_CMO) && !h_get_mpp_x(&mpp_x_data))
413 powerpc_firmware_features |= FW_FEATURE_XCMO;
414 else
415 powerpc_firmware_features &= ~FW_FEATURE_XCMO;
416}
417
406/**
407 * fw_cmo_feature_init - FW_FEATURE_CMO is not stored in ibm,hypertas-functions,
408 * handle that here. (Stolen from parse_system_parameter_string)
409 */
410void pSeries_cmo_feature_init(void)
411{
412 char *ptr, *key, *value, *end;
413 int call_status;

--- 53 unchanged lines hidden (view full) ---

467 CMO_PageSize = 1 << page_order;
468 pr_debug("CMO_PageSize = %lu\n", CMO_PageSize);
469
470 if (CMO_PrPSP != -1 || CMO_SecPSP != -1) {
471 pr_info("CMO enabled\n");
472 pr_debug("CMO enabled, PrPSP=%d, SecPSP=%d\n", CMO_PrPSP,
473 CMO_SecPSP);
474 powerpc_firmware_features |= FW_FEATURE_CMO;
418/**
419 * fw_cmo_feature_init - FW_FEATURE_CMO is not stored in ibm,hypertas-functions,
420 * handle that here. (Stolen from parse_system_parameter_string)
421 */
422void pSeries_cmo_feature_init(void)
423{
424 char *ptr, *key, *value, *end;
425 int call_status;

--- 53 unchanged lines hidden (view full) ---

479 CMO_PageSize = 1 << page_order;
480 pr_debug("CMO_PageSize = %lu\n", CMO_PageSize);
481
482 if (CMO_PrPSP != -1 || CMO_SecPSP != -1) {
483 pr_info("CMO enabled\n");
484 pr_debug("CMO enabled, PrPSP=%d, SecPSP=%d\n", CMO_PrPSP,
485 CMO_SecPSP);
486 powerpc_firmware_features |= FW_FEATURE_CMO;
487 pSeries_coalesce_init();
475 } else
476 pr_debug("CMO not enabled, PrPSP=%d, SecPSP=%d\n", CMO_PrPSP,
477 CMO_SecPSP);
478 spin_unlock(&rtas_data_buf_lock);
479 pr_debug(" <- fw_cmo_feature_init()\n");
480}
481
482/*

--- 212 unchanged lines hidden ---
488 } else
489 pr_debug("CMO not enabled, PrPSP=%d, SecPSP=%d\n", CMO_PrPSP,
490 CMO_SecPSP);
491 spin_unlock(&rtas_data_buf_lock);
492 pr_debug(" <- fw_cmo_feature_init()\n");
493}
494
495/*

--- 212 unchanged lines hidden ---