|
@@ -78,14 +78,14 @@ struct ps3_bmp {
|
|
/**
|
|
/**
|
|
* struct ps3_private - a per cpu data structure
|
|
* struct ps3_private - a per cpu data structure
|
|
* @bmp: ps3_bmp structure
|
|
* @bmp: ps3_bmp structure
|
|
- * @node: HV logical_ppe_id
|
|
|
|
- * @cpu: HV thread_id
|
|
|
|
|
|
+ * @ppe_id: HV logical_ppe_id
|
|
|
|
+ * @thread_id: HV thread_id
|
|
*/
|
|
*/
|
|
|
|
|
|
struct ps3_private {
|
|
struct ps3_private {
|
|
struct ps3_bmp bmp __attribute__ ((aligned (PS3_BMP_MINALIGN)));
|
|
struct ps3_bmp bmp __attribute__ ((aligned (PS3_BMP_MINALIGN)));
|
|
- u64 node;
|
|
|
|
- unsigned int cpu;
|
|
|
|
|
|
+ u64 ppe_id;
|
|
|
|
+ u64 thread_id;
|
|
};
|
|
};
|
|
|
|
|
|
static DEFINE_PER_CPU(struct ps3_private, ps3_private);
|
|
static DEFINE_PER_CPU(struct ps3_private, ps3_private);
|
|
@@ -105,7 +105,8 @@ static void ps3_chip_mask(unsigned int virq)
|
|
u64 old;
|
|
u64 old;
|
|
unsigned long flags;
|
|
unsigned long flags;
|
|
|
|
|
|
- pr_debug("%s:%d: cpu %u, virq %d\n", __func__, __LINE__, pd->cpu, virq);
|
|
|
|
|
|
+ pr_debug("%s:%d: thread_id %lu, virq %d\n", __func__, __LINE__,
|
|
|
|
+ pd->thread_id, virq);
|
|
|
|
|
|
local_irq_save(flags);
|
|
local_irq_save(flags);
|
|
asm volatile(
|
|
asm volatile(
|
|
@@ -117,7 +118,7 @@ static void ps3_chip_mask(unsigned int virq)
|
|
: "r" (bit), "r" (p)
|
|
: "r" (bit), "r" (p)
|
|
: "cc" );
|
|
: "cc" );
|
|
|
|
|
|
- lv1_did_update_interrupt_mask(pd->node, pd->cpu);
|
|
|
|
|
|
+ lv1_did_update_interrupt_mask(pd->ppe_id, pd->thread_id);
|
|
local_irq_restore(flags);
|
|
local_irq_restore(flags);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -136,7 +137,8 @@ static void ps3_chip_unmask(unsigned int virq)
|
|
u64 old;
|
|
u64 old;
|
|
unsigned long flags;
|
|
unsigned long flags;
|
|
|
|
|
|
- pr_debug("%s:%d: cpu %u, virq %d\n", __func__, __LINE__, pd->cpu, virq);
|
|
|
|
|
|
+ pr_debug("%s:%d: thread_id %lu, virq %d\n", __func__, __LINE__,
|
|
|
|
+ pd->thread_id, virq);
|
|
|
|
|
|
local_irq_save(flags);
|
|
local_irq_save(flags);
|
|
asm volatile(
|
|
asm volatile(
|
|
@@ -148,7 +150,7 @@ static void ps3_chip_unmask(unsigned int virq)
|
|
: "r" (bit), "r" (p)
|
|
: "r" (bit), "r" (p)
|
|
: "cc" );
|
|
: "cc" );
|
|
|
|
|
|
- lv1_did_update_interrupt_mask(pd->node, pd->cpu);
|
|
|
|
|
|
+ lv1_did_update_interrupt_mask(pd->ppe_id, pd->thread_id);
|
|
local_irq_restore(flags);
|
|
local_irq_restore(flags);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -162,7 +164,7 @@ static void ps3_chip_unmask(unsigned int virq)
|
|
static void ps3_chip_eoi(unsigned int virq)
|
|
static void ps3_chip_eoi(unsigned int virq)
|
|
{
|
|
{
|
|
const struct ps3_private *pd = get_irq_chip_data(virq);
|
|
const struct ps3_private *pd = get_irq_chip_data(virq);
|
|
- lv1_end_of_interrupt_ext(pd->node, pd->cpu, virq);
|
|
|
|
|
|
+ lv1_end_of_interrupt_ext(pd->ppe_id, pd->thread_id, virq);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -241,8 +243,8 @@ int ps3_virq_destroy(unsigned int virq)
|
|
{
|
|
{
|
|
const struct ps3_private *pd = get_irq_chip_data(virq);
|
|
const struct ps3_private *pd = get_irq_chip_data(virq);
|
|
|
|
|
|
- pr_debug("%s:%d: node %lu, cpu %d, virq %u\n", __func__, __LINE__,
|
|
|
|
- pd->node, pd->cpu, virq);
|
|
|
|
|
|
+ pr_debug("%s:%d: ppe_id %lu, thread_id %lu, virq %u\n", __func__,
|
|
|
|
+ __LINE__, pd->ppe_id, pd->thread_id, virq);
|
|
|
|
|
|
set_irq_chip_data(virq, NULL);
|
|
set_irq_chip_data(virq, NULL);
|
|
irq_dispose_mapping(virq);
|
|
irq_dispose_mapping(virq);
|
|
@@ -278,7 +280,8 @@ int ps3_irq_plug_setup(enum ps3_cpu_binding cpu, unsigned long outlet,
|
|
|
|
|
|
/* Binds outlet to cpu + virq. */
|
|
/* Binds outlet to cpu + virq. */
|
|
|
|
|
|
- result = lv1_connect_irq_plug_ext(pd->node, pd->cpu, *virq, outlet, 0);
|
|
|
|
|
|
+ result = lv1_connect_irq_plug_ext(pd->ppe_id, pd->thread_id, *virq,
|
|
|
|
+ outlet, 0);
|
|
|
|
|
|
if (result) {
|
|
if (result) {
|
|
pr_info("%s:%d: lv1_connect_irq_plug_ext failed: %s\n",
|
|
pr_info("%s:%d: lv1_connect_irq_plug_ext failed: %s\n",
|
|
@@ -310,12 +313,12 @@ int ps3_irq_plug_destroy(unsigned int virq)
|
|
int result;
|
|
int result;
|
|
const struct ps3_private *pd = get_irq_chip_data(virq);
|
|
const struct ps3_private *pd = get_irq_chip_data(virq);
|
|
|
|
|
|
- pr_debug("%s:%d: node %lu, cpu %d, virq %u\n", __func__, __LINE__,
|
|
|
|
- pd->node, pd->cpu, virq);
|
|
|
|
|
|
+ pr_debug("%s:%d: ppe_id %lu, thread_id %lu, virq %u\n", __func__,
|
|
|
|
+ __LINE__, pd->ppe_id, pd->thread_id, virq);
|
|
|
|
|
|
ps3_chip_mask(virq);
|
|
ps3_chip_mask(virq);
|
|
|
|
|
|
- result = lv1_disconnect_irq_plug_ext(pd->node, pd->cpu, virq);
|
|
|
|
|
|
+ result = lv1_disconnect_irq_plug_ext(pd->ppe_id, pd->thread_id, virq);
|
|
|
|
|
|
if (result)
|
|
if (result)
|
|
pr_info("%s:%d: lv1_disconnect_irq_plug_ext failed: %s\n",
|
|
pr_info("%s:%d: lv1_disconnect_irq_plug_ext failed: %s\n",
|
|
@@ -657,8 +660,8 @@ static void _dump_bmp(struct ps3_private* pd, const char* func, int line)
|
|
unsigned long flags;
|
|
unsigned long flags;
|
|
|
|
|
|
spin_lock_irqsave(&pd->bmp.lock, flags);
|
|
spin_lock_irqsave(&pd->bmp.lock, flags);
|
|
- _dump_64_bmp("stat", &pd->bmp.status, pd->cpu, func, line);
|
|
|
|
- _dump_64_bmp("mask", &pd->bmp.mask, pd->cpu, func, line);
|
|
|
|
|
|
+ _dump_64_bmp("stat", &pd->bmp.status, pd->thread_id, func, line);
|
|
|
|
+ _dump_64_bmp("mask", &pd->bmp.mask, pd->thread_id, func, line);
|
|
spin_unlock_irqrestore(&pd->bmp.lock, flags);
|
|
spin_unlock_irqrestore(&pd->bmp.lock, flags);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -669,7 +672,7 @@ static void __maybe_unused _dump_mask(struct ps3_private *pd,
|
|
unsigned long flags;
|
|
unsigned long flags;
|
|
|
|
|
|
spin_lock_irqsave(&pd->bmp.lock, flags);
|
|
spin_lock_irqsave(&pd->bmp.lock, flags);
|
|
- _dump_64_bmp("mask", &pd->bmp.mask, pd->cpu, func, line);
|
|
|
|
|
|
+ _dump_64_bmp("mask", &pd->bmp.mask, pd->thread_id, func, line);
|
|
spin_unlock_irqrestore(&pd->bmp.lock, flags);
|
|
spin_unlock_irqrestore(&pd->bmp.lock, flags);
|
|
}
|
|
}
|
|
#else
|
|
#else
|
|
@@ -722,8 +725,8 @@ static unsigned int ps3_get_irq(void)
|
|
plug &= 0x3f;
|
|
plug &= 0x3f;
|
|
|
|
|
|
if (unlikely(plug) == NO_IRQ) {
|
|
if (unlikely(plug) == NO_IRQ) {
|
|
- pr_debug("%s:%d: no plug found: cpu %u\n", __func__, __LINE__,
|
|
|
|
- pd->cpu);
|
|
|
|
|
|
+ pr_debug("%s:%d: no plug found: thread_id %lu\n", __func__,
|
|
|
|
+ __LINE__, pd->thread_id);
|
|
dump_bmp(&per_cpu(ps3_private, 0));
|
|
dump_bmp(&per_cpu(ps3_private, 0));
|
|
dump_bmp(&per_cpu(ps3_private, 1));
|
|
dump_bmp(&per_cpu(ps3_private, 1));
|
|
return NO_IRQ;
|
|
return NO_IRQ;
|
|
@@ -753,16 +756,16 @@ void __init ps3_init_IRQ(void)
|
|
for_each_possible_cpu(cpu) {
|
|
for_each_possible_cpu(cpu) {
|
|
struct ps3_private *pd = &per_cpu(ps3_private, cpu);
|
|
struct ps3_private *pd = &per_cpu(ps3_private, cpu);
|
|
|
|
|
|
- lv1_get_logical_ppe_id(&pd->node);
|
|
|
|
- pd->cpu = get_hard_smp_processor_id(cpu);
|
|
|
|
|
|
+ lv1_get_logical_ppe_id(&pd->ppe_id);
|
|
|
|
+ pd->thread_id = get_hard_smp_processor_id(cpu);
|
|
spin_lock_init(&pd->bmp.lock);
|
|
spin_lock_init(&pd->bmp.lock);
|
|
|
|
|
|
- pr_debug("%s:%d: node %lu, cpu %d, bmp %lxh\n", __func__,
|
|
|
|
- __LINE__, pd->node, pd->cpu,
|
|
|
|
|
|
+ pr_debug("%s:%d: ppe_id %lu, thread_id %lu, bmp %lxh\n",
|
|
|
|
+ __func__, __LINE__, pd->ppe_id, pd->thread_id,
|
|
ps3_mm_phys_to_lpar(__pa(&pd->bmp)));
|
|
ps3_mm_phys_to_lpar(__pa(&pd->bmp)));
|
|
|
|
|
|
- result = lv1_configure_irq_state_bitmap(pd->node, pd->cpu,
|
|
|
|
- ps3_mm_phys_to_lpar(__pa(&pd->bmp)));
|
|
|
|
|
|
+ result = lv1_configure_irq_state_bitmap(pd->ppe_id,
|
|
|
|
+ pd->thread_id, ps3_mm_phys_to_lpar(__pa(&pd->bmp)));
|
|
|
|
|
|
if (result)
|
|
if (result)
|
|
pr_debug("%s:%d: lv1_configure_irq_state_bitmap failed:"
|
|
pr_debug("%s:%d: lv1_configure_irq_state_bitmap failed:"
|